Considering that now RedPipeItem have reference counting and that lot of items are just used to store constant data to send, using reference counting instead of creating different items for each client is easier to do. So this new red_channel_pipes_add allows to add a single item to all clients. Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- server/red-channel.c | 12 ++++++++++++ server/red-channel.h | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/server/red-channel.c b/server/red-channel.c index a8ab5230..4229794d 100644 --- a/server/red-channel.c +++ b/server/red-channel.c @@ -429,6 +429,18 @@ void red_channel_init_outgoing_messages_window(RedChannel *channel) (GFunc)red_channel_client_init_outgoing_messages_window, NULL); } +void red_channel_pipes_add(RedChannel *channel, RedPipeItem *item) +{ + RedChannelClient *rcc; + + FOREACH_CLIENT(channel, rcc) { + red_pipe_item_ref(item); + red_channel_client_pipe_add(rcc, 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); diff --git a/server/red-channel.h b/server/red-channel.h index 8ea5a711..a699f4e2 100644 --- a/server/red-channel.h +++ b/server/red-channel.h @@ -172,6 +172,12 @@ void red_channel_pipes_add_type(RedChannel *channel, int pipe_item_type); void red_channel_pipes_add_empty_msg(RedChannel *channel, int msg_type); +/* Add an item to all the clients connected. + * The same item is shared between all clients. + * Function will take ownership of the item. + */ +void red_channel_pipes_add(RedChannel *channel, RedPipeItem *item); + /* return TRUE if all of the connected clients to this channel are blocked */ bool red_channel_all_blocked(RedChannel *channel); -- 2.13.5 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel