[Spice-devel] [PATCH spice 8/9] red-channel: return number of created pipe items
Marc-André Lureau
marcandre.lureau at gmail.com
Wed Dec 9 16:04:28 PST 2015
This is useful in the following patches to count the number of replies
to wait for.
Signed-off-by: Marc-André Lureau <marcandre.lureau at gmail.com>
---
server/red-channel.c | 21 +++++++++++++--------
server/red-channel.h | 2 +-
2 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/server/red-channel.c b/server/red-channel.c
index fcbe868..ff1411f 100644
--- a/server/red-channel.c
+++ b/server/red-channel.c
@@ -2233,14 +2233,14 @@ int red_client_during_migrate_at_target(RedClient *client)
typedef void (*rcc_item_t)(RedChannelClient *rcc, PipeItem *item);
typedef int (*rcc_item_cond_t)(RedChannelClient *rcc, PipeItem *item);
-static void red_channel_pipes_create_batch(RedChannel *channel,
- new_pipe_item_t creator, void *data,
- rcc_item_t callback)
+static int red_channel_pipes_create_batch(RedChannel *channel,
+ new_pipe_item_t creator, void *data,
+ rcc_item_t callback)
{
RingItem *link, *next;
RedChannelClient *rcc;
PipeItem *item;
- int num = 0;
+ int num = 0, n = 0;
spice_assert(callback);
@@ -2249,16 +2249,21 @@ static void red_channel_pipes_create_batch(RedChannel *channel,
item = (*creator)(rcc, data, num++);
if (item != NULL) {
(*callback)(rcc, item);
+ n++;
}
}
+
+ return n;
}
-void red_channel_pipes_new_add_push(RedChannel *channel,
- new_pipe_item_t creator, void *data)
+int red_channel_pipes_new_add_push(RedChannel *channel,
+ new_pipe_item_t creator, void *data)
{
- red_channel_pipes_create_batch(channel, creator, data,
- red_channel_client_pipe_add);
+ int n = red_channel_pipes_create_batch(channel, creator, data,
+ red_channel_client_pipe_add);
red_channel_push(channel);
+
+ return n;
}
void red_channel_pipes_new_add(RedChannel *channel, new_pipe_item_t creator, void *data)
diff --git a/server/red-channel.h b/server/red-channel.h
index 609bce3..226de49 100644
--- a/server/red-channel.h
+++ b/server/red-channel.h
@@ -476,7 +476,7 @@ void red_channel_pipe_item_init(RedChannel *channel, PipeItem *item, int type);
// helper to push a new item to all channels
typedef PipeItem *(*new_pipe_item_t)(RedChannelClient *rcc, void *data, int num);
-void red_channel_pipes_new_add_push(RedChannel *channel, new_pipe_item_t creator, void *data);
+int red_channel_pipes_new_add_push(RedChannel *channel, new_pipe_item_t creator, void *data);
void red_channel_pipes_new_add(RedChannel *channel, new_pipe_item_t creator, void *data);
void red_channel_pipes_new_add_tail(RedChannel *channel, new_pipe_item_t creator, void *data);
--
2.5.0
More information about the Spice-devel
mailing list