[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