[Spice-devel] [PATCH spice-server 5/6] red-channel: Reuse red_channel_pipes_add
Jonathon Jongsma
jjongsma at redhat.com
Tue Aug 29 14:53:21 UTC 2017
Acked-by: Jonathon Jongsma <jjongsma at redhat.com>
On Tue, 2017-08-29 at 11:53 +0100, Frediano Ziglio wrote:
> Implements red_channel_pipes_add_type and
> red_channel_pipes_add_empty_msg using red_channel_pipes_add.
> This avoid duplicating items for each client.
>
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> server/red-channel-client.c | 9 +++++++--
> server/red-channel-client.h | 1 +
> server/red-channel.c | 20 +++++---------------
> 3 files changed, 13 insertions(+), 17 deletions(-)
>
> diff --git a/server/red-channel-client.c b/server/red-channel-
> client.c
> index 941c9aec..660a46d0 100644
> --- a/server/red-channel-client.c
> +++ b/server/red-channel-client.c
> @@ -1593,13 +1593,18 @@ void
> red_channel_client_pipe_add_type(RedChannelClient *rcc, int
> pipe_item_type)
> red_channel_client_pipe_add(rcc, item);
> }
>
> -void red_channel_client_pipe_add_empty_msg(RedChannelClient *rcc,
> int msg_type)
> +RedPipeItem *red_channel_client_new_empty_msg(int msg_type)
> {
> RedEmptyMsgPipeItem *item = spice_new(RedEmptyMsgPipeItem, 1);
>
> red_pipe_item_init(&item->base, RED_PIPE_ITEM_TYPE_EMPTY_MSG);
> item->msg = msg_type;
> - red_channel_client_pipe_add(rcc, &item->base);
> + return &item->base;
> +}
> +
> +void red_channel_client_pipe_add_empty_msg(RedChannelClient *rcc,
> int msg_type)
> +{
> + red_channel_client_pipe_add(rcc,
> red_channel_client_new_empty_msg(msg_type));
> }
>
> gboolean red_channel_client_pipe_is_empty(RedChannelClient *rcc)
> diff --git a/server/red-channel-client.h b/server/red-channel-
> client.h
> index 057732f4..c39b564e 100644
> --- a/server/red-channel-client.h
> +++ b/server/red-channel-client.h
> @@ -99,6 +99,7 @@ void
> red_channel_client_pipe_add_tail(RedChannelClient *rcc, RedPipeItem
> *item);
> void red_channel_client_pipe_add_tail_and_push(RedChannelClient
> *rcc, RedPipeItem *item);
> /* for types that use this routine -> the pipe item should be freed
> */
> void red_channel_client_pipe_add_type(RedChannelClient *rcc, int
> pipe_item_type);
> +RedPipeItem *red_channel_client_new_empty_msg(int msg_type);
> void red_channel_client_pipe_add_empty_msg(RedChannelClient *rcc,
> int msg_type);
> gboolean red_channel_client_pipe_is_empty(RedChannelClient *rcc);
> uint32_t red_channel_client_get_pipe_size(RedChannelClient *rcc);
> diff --git a/server/red-channel.c b/server/red-channel.c
> index 6e8e9c6b..490447ed 100644
> --- a/server/red-channel.c
> +++ b/server/red-channel.c
> @@ -442,28 +442,18 @@ void red_channel_pipes_add(RedChannel *channel,
> RedPipeItem *item)
> red_pipe_item_unref(item);
> }
>
> -static void red_channel_client_pipe_add_type_proxy(gpointer data,
> gpointer user_data)
> -{
> - int type = GPOINTER_TO_INT(user_data);
> - red_channel_client_pipe_add_type(data, type);
> -}
> -
> void red_channel_pipes_add_type(RedChannel *channel, int
> pipe_item_type)
> {
> - g_list_foreach(channel->priv->clients,
> red_channel_client_pipe_add_type_proxy,
> - GINT_TO_POINTER(pipe_item_type));
> -}
> + RedPipeItem *item = spice_new(RedPipeItem, 1);
>
> -static void red_channel_client_pipe_add_empty_msg_proxy(gpointer
> data, gpointer user_data)
> -{
> - int type = GPOINTER_TO_INT(user_data);
> - red_channel_client_pipe_add_empty_msg(data, type);
> + red_pipe_item_init(item, pipe_item_type);
> +
> + red_channel_pipes_add(channel, item);
> }
>
> void red_channel_pipes_add_empty_msg(RedChannel *channel, int
> msg_type)
> {
> - g_list_foreach(channel->priv->clients,
> red_channel_client_pipe_add_empty_msg_proxy,
> - GINT_TO_POINTER(msg_type));
> + red_channel_pipes_add(channel,
> red_channel_client_new_empty_msg(msg_type));
> }
>
> int red_channel_is_connected(RedChannel *channel)
More information about the Spice-devel
mailing list