[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