red-parse-qxl: Use QXLReleaseInfoExt instead of QXLReleaseInfo

This should allow to avoid moving the group_id separately from the QXL
commands all over the code.

Acked-by: Frediano Ziglio <fziglio@redhat.com>
This commit is contained in:
Christophe Fergeau 2016-02-12 18:51:07 +01:00 committed by Frediano Ziglio
parent 4049481882
commit 8091df87b3
5 changed files with 19 additions and 30 deletions

View File

@ -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);

View File

@ -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:

View File

@ -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) {

View File

@ -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 {

View File

@ -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;
}