[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