[Spice-devel] [PATCH spice-server 2/4] red-qxl: remove use of g_object_get_data()
Christophe de Dinechin
cdupontd at redhat.com
Wed Aug 30 08:23:14 UTC 2017
> On 30 Aug 2017, at 00:28, Jonathon Jongsma <jjongsma at redhat.com> 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 at redhat.com>
> ---
> 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);
This sequence is repeated three times in this patch alone.
That suggests adding a small inline function or macro so as to write it as:
dispatcher = channel_get_dispatcher(channel);
>
> 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
More information about the Spice-devel
mailing list