[Spice-devel] [spice-server 08/10] red-parse-qxl: Use QXLReleaseInfoExt instead of QXLReleaseInfo

Christophe Fergeau cfergeau at redhat.com
Fri Feb 12 17:51:07 UTC 2016


This should allow to avoid moving the group_id separately from the QXL
commands all over the code.
---
 server/cursor-channel.c  |  5 +----
 server/display-channel.c | 11 ++---------
 server/red-parse-qxl.c   | 15 ++++++++++-----
 server/red-parse-qxl.h   |  8 ++++----
 server/red-worker.c      | 10 ++--------
 5 files changed, 19 insertions(+), 30 deletions(-)

diff --git a/server/cursor-channel.c b/server/cursor-channel.c
index 197376a..d9b6faa 100644
--- a/server/cursor-channel.c
+++ b/server/cursor-channel.c
@@ -109,7 +109,6 @@ static CursorItem *cursor_item_ref(CursorItem *item)
 
 static void cursor_item_unref(CursorItem *item)
 {
-    QXLReleaseInfoExt release_info_ext;
     RedCursorCmd *cursor_cmd;
 
     spice_return_if_fail(item != NULL);
@@ -118,9 +117,7 @@ static void cursor_item_unref(CursorItem *item)
         return;
 
     cursor_cmd = item->red_cursor;
-    release_info_ext.group_id = item->group_id;
-    release_info_ext.info = cursor_cmd->release_info;
-    item->qxl->st->qif->release_resource(item->qxl, release_info_ext);
+    item->qxl->st->qif->release_resource(item->qxl, cursor_cmd->release_info_ext);
     red_put_cursor_cmd(cursor_cmd);
     free(cursor_cmd);
 
diff --git a/server/display-channel.c b/server/display-channel.c
index bae0dcc..b4b46a6 100644
--- a/server/display-channel.c
+++ b/server/display-channel.c
@@ -2073,13 +2073,6 @@ DisplayChannel* display_channel_new(RedWorker *worker, int migrate, int stream_v
     return display;
 }
 
-static inline void set_surface_release_info(QXLReleaseInfoExt *release_info_ext,
-                                            QXLReleaseInfo *release_info, uint32_t group_id)
-{
-    release_info_ext->info = release_info;
-    release_info_ext->group_id = group_id;
-}
-
 void display_channel_process_surface_cmd(DisplayChannel *display, RedSurfaceCmd *surface,
                                          uint32_t group_id, int loadvm)
 {
@@ -2113,7 +2106,7 @@ void display_channel_process_surface_cmd(DisplayChannel *display, RedSurfaceCmd
                                        reloaded_surface,
                                        // reloaded surfaces will be sent on demand
                                        !reloaded_surface);
-        set_surface_release_info(&red_surface->create, surface->release_info, group_id);
+        red_surface->create = surface->release_info_ext;
         break;
     }
     case QXL_SURFACE_CMD_DESTROY:
@@ -2121,7 +2114,7 @@ void display_channel_process_surface_cmd(DisplayChannel *display, RedSurfaceCmd
             spice_warning("avoiding destroying a surface twice");
             break;
         }
-        set_surface_release_info(&red_surface->destroy, surface->release_info, group_id);
+        red_surface->destroy = surface->release_info_ext;
         display_channel_destroy_surface(display, surface_id);
         break;
     default:
diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c
index 0270ae5..4d2cc72 100644
--- a/server/red-parse-qxl.c
+++ b/server/red-parse-qxl.c
@@ -1260,7 +1260,9 @@ int red_get_update_cmd(RedMemSlotInfo *slots, int group_id,
     if (error) {
         return 1;
     }
-    red->release_info     = &qxl->release_info;
+    red->release_info_ext.info     = &qxl->release_info;
+    red->release_info_ext.group_id = group_id;
+
 
     red_get_rect_ptr(&red->area, &qxl->area);
     red->update_id  = qxl->update_id;
@@ -1289,8 +1291,9 @@ int red_get_message(RedMemSlotInfo *slots, int group_id,
     if (error) {
         return 1;
     }
-    red->release_info  = &qxl->release_info;
-    red->data          = qxl->data;
+    red->release_info_ext.info      = &qxl->release_info;
+    red->release_info_ext.group_id  = group_id;
+    red->data                       = qxl->data;
     return 0;
 }
 
@@ -1329,7 +1332,8 @@ int red_get_surface_cmd(RedMemSlotInfo *slots, int group_id,
     if (error) {
         return 1;
     }
-    red->release_info     = &qxl->release_info;
+    red->release_info_ext.info      = &qxl->release_info;
+    red->release_info_ext.group_id  = group_id;
 
     red->surface_id = qxl->surface_id;
     red->type       = qxl->type;
@@ -1433,7 +1437,8 @@ int red_get_cursor_cmd(RedMemSlotInfo *slots, int group_id,
     if (error) {
         return error;
     }
-    red->release_info     = &qxl->release_info;
+    red->release_info_ext.info      = &qxl->release_info;
+    red->release_info_ext.group_id  = group_id;
 
     red->type = qxl->type;
     switch (red->type) {
diff --git a/server/red-parse-qxl.h b/server/red-parse-qxl.h
index 6bb0d4e..b5f95e6 100644
--- a/server/red-parse-qxl.h
+++ b/server/red-parse-qxl.h
@@ -65,14 +65,14 @@ static inline RedDrawable *red_drawable_ref(RedDrawable *drawable)
 }
 
 typedef struct RedUpdateCmd {
-    QXLReleaseInfo *release_info;
+    QXLReleaseInfoExt release_info_ext;
     SpiceRect area;
     uint32_t update_id;
     uint32_t surface_id;
 } RedUpdateCmd;
 
 typedef struct RedMessage {
-    QXLReleaseInfo *release_info;
+    QXLReleaseInfoExt release_info_ext;
     uint8_t *data;
 } RedMessage;
 
@@ -93,7 +93,7 @@ typedef struct RedSurfaceCreate {
 } RedSurfaceCreate;
 
 typedef struct RedSurfaceCmd {
-    QXLReleaseInfo *release_info;
+    QXLReleaseInfoExt release_info_ext;
     uint32_t surface_id;
     uint8_t type;
     uint32_t flags;
@@ -103,7 +103,7 @@ typedef struct RedSurfaceCmd {
 } RedSurfaceCmd;
 
 typedef struct RedCursorCmd {
-    QXLReleaseInfo *release_info;
+    QXLReleaseInfoExt release_info_ext;
     uint8_t type;
     union {
         struct {
diff --git a/server/red-worker.c b/server/red-worker.c
index 3acab24..2b5a06d 100644
--- a/server/red-worker.c
+++ b/server/red-worker.c
@@ -243,7 +243,6 @@ static int red_process_display(RedWorker *worker, int *ring_is_empty)
         }
         case QXL_CMD_UPDATE: {
             RedUpdateCmd update;
-            QXLReleaseInfoExt release_info_ext;
 
             if (red_get_update_cmd(&worker->mem_slots, ext_cmd.group_id,
                                    &update, ext_cmd.cmd.data)) {
@@ -255,15 +254,12 @@ static int red_process_display(RedWorker *worker, int *ring_is_empty)
                 display_channel_draw(worker->display_channel, &update.area, update.surface_id);
                 worker->qxl->st->qif->notify_update(worker->qxl, update.update_id);
             }
-            release_info_ext.group_id = ext_cmd.group_id;
-            release_info_ext.info = update.release_info;
-            worker->qxl->st->qif->release_resource(worker->qxl, release_info_ext);
+            worker->qxl->st->qif->release_resource(worker->qxl, update.release_info_ext);
             red_put_update_cmd(&update);
             break;
         }
         case QXL_CMD_MESSAGE: {
             RedMessage message;
-            QXLReleaseInfoExt release_info_ext;
 
             if (red_get_message(&worker->mem_slots, ext_cmd.group_id,
                                 &message, ext_cmd.cmd.data)) {
@@ -273,9 +269,7 @@ static int red_process_display(RedWorker *worker, int *ring_is_empty)
             /* alert: accessing message.data is insecure */
             spice_warning("MESSAGE: %s", message.data);
 #endif
-            release_info_ext.group_id = ext_cmd.group_id;
-            release_info_ext.info = message.release_info;
-            worker->qxl->st->qif->release_resource(worker->qxl, release_info_ext);
+            worker->qxl->st->qif->release_resource(worker->qxl, message.release_info_ext);
             red_put_message(&message);
             break;
         }
-- 
2.5.0



More information about the Spice-devel mailing list