[Spice-devel] [PATCH 09/11] cc: change reference from RedWorker to QXLInstance

Frediano Ziglio fziglio at redhat.com
Tue Feb 9 10:27:58 UTC 2016


CommonChannel does not need to know about RedWorker.
This reduce a bit dependencies between objects.

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 server/cursor-channel.c  |  2 +-
 server/dcc-encoders.c    |  3 +--
 server/display-channel.c |  5 ++---
 server/red-worker.c      | 12 ++++++------
 server/red-worker.h      |  5 +++--
 5 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/server/cursor-channel.c b/server/cursor-channel.c
index bbaac34..197376a 100644
--- a/server/cursor-channel.c
+++ b/server/cursor-channel.c
@@ -489,7 +489,7 @@ void cursor_channel_process_cmd(CursorChannel *cursor, RedCursorCmd *cursor_cmd,
     spice_return_if_fail(cursor);
     spice_return_if_fail(cursor_cmd);
 
-    cursor_item = cursor_item_new(red_worker_get_qxl(cursor->common.worker),
+    cursor_item = cursor_item_new(cursor->common.qxl,
                                   cursor_cmd, group_id);
 
     switch (cursor_cmd->type) {
diff --git a/server/dcc-encoders.c b/server/dcc-encoders.c
index 0923c9c..c810b8e 100644
--- a/server/dcc-encoders.c
+++ b/server/dcc-encoders.c
@@ -456,7 +456,6 @@ void dcc_free_glz_drawable_instance(DisplayChannelClient *dcc,
                                     GlzDrawableInstanceItem *instance)
 {
     DisplayChannel *display_channel = DCC_TO_DC(dcc);
-    RedWorker *worker = display_channel->common.worker;
     RedGlzDrawable *glz_drawable;
 
     spice_assert(instance);
@@ -484,7 +483,7 @@ void dcc_free_glz_drawable_instance(DisplayChannelClient *dcc,
         if (drawable) {
             ring_remove(&glz_drawable->drawable_link);
         }
-        red_drawable_unref(worker, glz_drawable->red_drawable,
+        red_drawable_unref(display_channel, glz_drawable->red_drawable,
                            glz_drawable->group_id);
         display_channel->glz_drawable_count--;
         if (ring_item_is_linked(&glz_drawable->link)) {
diff --git a/server/display-channel.c b/server/display-channel.c
index f0d133a..d505d3a 100644
--- a/server/display-channel.c
+++ b/server/display-channel.c
@@ -241,8 +241,7 @@ static void stop_streams(DisplayChannel *display)
 void display_channel_surface_unref(DisplayChannel *display, uint32_t surface_id)
 {
     RedSurface *surface = &display->surfaces[surface_id];
-    RedWorker *worker = COMMON_CHANNEL(display)->worker;
-    QXLInstance *qxl = red_worker_get_qxl(worker);
+    QXLInstance *qxl = display->common.qxl;
     DisplayChannelClient *dcc;
     RingItem *link, *next;
 
@@ -1445,7 +1444,7 @@ void display_channel_drawable_unref(DisplayChannel *display, Drawable *drawable)
         ring_remove(item);
     }
     if (drawable->red_drawable) {
-        red_drawable_unref(COMMON_CHANNEL(display)->worker, drawable->red_drawable, drawable->group_id);
+        red_drawable_unref(display, drawable->red_drawable, drawable->group_id);
     }
     drawable_free(display, drawable);
     display->drawable_count--;
diff --git a/server/red-worker.c b/server/red-worker.c
index 3bb8227..1757b8e 100644
--- a/server/red-worker.c
+++ b/server/red-worker.c
@@ -129,7 +129,7 @@ static void common_release_recv_buf(RedChannelClient *rcc, uint16_t type, uint32
     }
 }
 
-void red_drawable_unref(RedWorker *worker, RedDrawable *red_drawable,
+void red_drawable_unref(DisplayChannel *display, RedDrawable *red_drawable,
                         uint32_t group_id)
 {
     QXLReleaseInfoExt release_info_ext;
@@ -137,10 +137,10 @@ void red_drawable_unref(RedWorker *worker, RedDrawable *red_drawable,
     if (--red_drawable->refs) {
         return;
     }
-    worker->display_channel->red_drawable_count--;
+    display->red_drawable_count--;
     release_info_ext.group_id = group_id;
     release_info_ext.info = red_drawable->release_info;
-    worker->qxl->st->qif->release_resource(worker->qxl, release_info_ext);
+    display->common.qxl->st->qif->release_resource(display->common.qxl, release_info_ext);
     red_put_drawable(red_drawable);
     free(red_drawable);
 }
@@ -243,7 +243,7 @@ static int red_process_display(RedWorker *worker, int *ring_is_empty)
                                              worker->process_display_generation);
             }
             // release the red_drawable
-            red_drawable_unref(worker, red_drawable, ext_cmd.group_id);
+            red_drawable_unref(worker->display_channel, red_drawable, ext_cmd.group_id);
             break;
         }
         case QXL_CMD_UPDATE: {
@@ -469,7 +469,7 @@ CommonChannelClient *common_channel_new_client(CommonChannel *common,
         return NULL;
     }
     CommonChannelClient *common_cc = (CommonChannelClient*)rcc;
-    common_cc->id = common->worker->qxl->id;
+    common_cc->id = common->qxl->id;
     common->during_target_migrate = mig_target;
 
     // TODO: move wide/narrow ack setting to red_channel.
@@ -510,7 +510,7 @@ CommonChannel *red_worker_new_channel(RedWorker *worker, int size,
     red_channel_set_stat_node(channel, stat_add_node(worker->stat, name, TRUE));
 
     common = (CommonChannel *)channel;
-    common->worker = worker;
+    common->qxl = worker->qxl;
     return common;
 }
 
diff --git a/server/red-worker.h b/server/red-worker.h
index 005c15f..1285942 100644
--- a/server/red-worker.h
+++ b/server/red-worker.h
@@ -38,7 +38,7 @@ typedef struct CommonChannelClient {
 typedef struct CommonChannel {
     RedChannel base; // Must be the first thing
 
-    struct RedWorker *worker;
+    QXLInstance *qxl;
     uint8_t recv_buf[CHANNEL_RECEIVE_BUF_SIZE];
     uint32_t id_alloc; // bitfield. TODO - use this instead of shift scheme.
     int during_target_migrate; /* TRUE when the client that is associated with the channel
@@ -97,7 +97,8 @@ QXLInstance* red_worker_get_qxl(RedWorker *worker);
 RedChannel* red_worker_get_cursor_channel(RedWorker *worker);
 RedChannel* red_worker_get_display_channel(RedWorker *worker);
 
-void red_drawable_unref(RedWorker *worker, RedDrawable *red_drawable,
+struct DisplayChannel;
+void red_drawable_unref(struct DisplayChannel *display, RedDrawable *red_drawable,
                         uint32_t group_id);
 
 CommonChannel *red_worker_new_channel(RedWorker *worker, int size,
-- 
2.5.0



More information about the Spice-devel mailing list