Acked-by: Christophe Fergeau <cfergeau@xxxxxxxxxx> On Tue, Aug 29, 2017 at 05:28:07PM -0500, Jonathon Jongsma wrote: > Rather than using g_object_set_data() to attach the dispatcher to the > channel, we can simply retrieve it from the QXLInstance that is > associated with the Cursor/DisplayChannel > > Signed-off-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx> > --- > server/common-graphics-channel.c | 1 - > server/red-qxl.c | 28 ++++++++++++++++++++-------- > server/red-worker.c | 5 +---- > 3 files changed, 21 insertions(+), 13 deletions(-) > > diff --git a/server/common-graphics-channel.c b/server/common-graphics-channel.c > index e8c18a523..8c87d4dbb 100644 > --- a/server/common-graphics-channel.c > +++ b/server/common-graphics-channel.c > @@ -141,7 +141,6 @@ bool common_channel_client_config_socket(RedChannelClient *rcc) > return TRUE; > } > > - > static void > common_graphics_channel_class_init(CommonGraphicsChannelClass *klass) > { > diff --git a/server/red-qxl.c b/server/red-qxl.c > index 53f3338b0..4a8f523b7 100644 > --- a/server/red-qxl.c > +++ b/server/red-qxl.c > @@ -37,6 +37,7 @@ > #include "dispatcher.h" > #include "red-parse-qxl.h" > #include "red-channel-client.h" > +#include "common-graphics-channel.h" > > #include "red-qxl.h" > > @@ -79,10 +80,10 @@ static void red_qxl_set_display_peer(RedChannel *channel, RedClient *client, > RedChannelCapabilities *caps) > { > RedWorkerMessageDisplayConnect payload = {0,}; > - Dispatcher *dispatcher; > + QXLInstance *qxl = common_graphics_channel_get_qxl(COMMON_GRAPHICS_CHANNEL(channel)); > + Dispatcher *dispatcher = red_qxl_get_dispatcher(qxl); > > spice_debug("%s", ""); > - dispatcher = (Dispatcher *)g_object_get_data(G_OBJECT(channel), "dispatcher"); > payload.client = client; > payload.stream = stream; > payload.migration = migration; > @@ -96,6 +97,7 @@ static void red_qxl_set_display_peer(RedChannel *channel, RedClient *client, > static void red_qxl_disconnect_display_peer(RedChannelClient *rcc) > { > RedWorkerMessageDisplayDisconnect payload; > + QXLInstance *qxl; > Dispatcher *dispatcher; > RedChannel *channel = red_channel_client_get_channel(rcc); > > @@ -103,7 +105,8 @@ static void red_qxl_disconnect_display_peer(RedChannelClient *rcc) > return; > } > > - dispatcher = (Dispatcher *)g_object_get_data(G_OBJECT(channel), "dispatcher"); > + qxl = common_graphics_channel_get_qxl(COMMON_GRAPHICS_CHANNEL(channel)); > + dispatcher = red_qxl_get_dispatcher(qxl); > > spice_printerr(""); > payload.rcc = rcc; > @@ -118,6 +121,7 @@ static void red_qxl_disconnect_display_peer(RedChannelClient *rcc) > static void red_qxl_display_migrate(RedChannelClient *rcc) > { > RedWorkerMessageDisplayMigrate payload; > + QXLInstance *qxl; > Dispatcher *dispatcher; > RedChannel *channel = red_channel_client_get_channel(rcc); > uint32_t type, id; > @@ -125,8 +129,11 @@ static void red_qxl_display_migrate(RedChannelClient *rcc) > if (!channel) { > return; > } > - g_object_get(channel, "channel-type", &type, "id", &id, NULL); > - dispatcher = (Dispatcher *)g_object_get_data(G_OBJECT(channel), "dispatcher"); > + g_object_get(channel, "channel-type", &type, "id", &id, > + NULL); > + > + qxl = common_graphics_channel_get_qxl(COMMON_GRAPHICS_CHANNEL(channel)); > + dispatcher = red_qxl_get_dispatcher(qxl); > spice_printerr("channel type %u id %u", type, id); > payload.rcc = rcc; > dispatcher_send_message(dispatcher, > @@ -139,7 +146,8 @@ static void red_qxl_set_cursor_peer(RedChannel *channel, RedClient *client, Reds > RedChannelCapabilities *caps) > { > RedWorkerMessageCursorConnect payload = {0,}; > - Dispatcher *dispatcher = (Dispatcher *)g_object_get_data(G_OBJECT(channel), "dispatcher"); > + QXLInstance *qxl = common_graphics_channel_get_qxl(COMMON_GRAPHICS_CHANNEL(channel)); > + Dispatcher *dispatcher = red_qxl_get_dispatcher(qxl); > spice_printerr(""); > payload.client = client; > payload.stream = stream; > @@ -154,6 +162,7 @@ static void red_qxl_set_cursor_peer(RedChannel *channel, RedClient *client, Reds > static void red_qxl_disconnect_cursor_peer(RedChannelClient *rcc) > { > RedWorkerMessageCursorDisconnect payload; > + QXLInstance *qxl; > Dispatcher *dispatcher; > RedChannel *channel = red_channel_client_get_channel(rcc); > > @@ -161,7 +170,8 @@ static void red_qxl_disconnect_cursor_peer(RedChannelClient *rcc) > return; > } > > - dispatcher = (Dispatcher *)g_object_get_data(G_OBJECT(channel), "dispatcher"); > + qxl = common_graphics_channel_get_qxl(COMMON_GRAPHICS_CHANNEL(channel)); > + dispatcher = red_qxl_get_dispatcher(qxl); > spice_printerr(""); > payload.rcc = rcc; > > @@ -173,6 +183,7 @@ static void red_qxl_disconnect_cursor_peer(RedChannelClient *rcc) > static void red_qxl_cursor_migrate(RedChannelClient *rcc) > { > RedWorkerMessageCursorMigrate payload; > + QXLInstance *qxl; > Dispatcher *dispatcher; > RedChannel *channel = red_channel_client_get_channel(rcc); > uint32_t type, id; > @@ -181,8 +192,9 @@ static void red_qxl_cursor_migrate(RedChannelClient *rcc) > return; > } > g_object_get(channel, "channel-type", &type, "id", &id, NULL); > - dispatcher = (Dispatcher *)g_object_get_data(G_OBJECT(channel), "dispatcher"); > spice_printerr("channel type %u id %u", type, id); > + qxl = common_graphics_channel_get_qxl(COMMON_GRAPHICS_CHANNEL(channel)); > + dispatcher = red_qxl_get_dispatcher(qxl); > payload.rcc = rcc; > dispatcher_send_message(dispatcher, > RED_WORKER_MESSAGE_CURSOR_MIGRATE, > diff --git a/server/red-worker.c b/server/red-worker.c > index 812a40b4b..c43bb1244 100644 > --- a/server/red-worker.c > +++ b/server/red-worker.c > @@ -1341,12 +1341,10 @@ RedWorker* red_worker_new(QXLInstance *qxl, > > worker->event_timeout = INF_EVENT_WAIT; > > - worker->cursor_channel = cursor_channel_new(reds, qxl, > - &worker->core); > + worker->cursor_channel = cursor_channel_new(reds, qxl, &worker->core); > channel = RED_CHANNEL(worker->cursor_channel); > red_channel_init_stat_node(channel, &worker->stat, "cursor_channel"); > red_channel_register_client_cbs(channel, client_cursor_cbs, NULL); > - g_object_set_data(G_OBJECT(channel), "dispatcher", dispatcher); > reds_register_channel(reds, channel); > > // TODO: handle seemless migration. Temp, setting migrate to FALSE > @@ -1357,7 +1355,6 @@ RedWorker* red_worker_new(QXLInstance *qxl, > channel = RED_CHANNEL(worker->display_channel); > red_channel_init_stat_node(channel, &worker->stat, "display_channel"); > red_channel_register_client_cbs(channel, client_display_cbs, NULL); > - g_object_set_data(G_OBJECT(channel), "dispatcher", dispatcher); > reds_register_channel(reds, channel); > > return worker; > -- > 2.13.3 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/spice-devel _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel