[PATCH v3 4/9] red-channel: return number of created pipe items

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is useful in the following patches to count the number of replies
to wait for.

Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxx>
---
 server/red-channel.c | 19 +++++++++++++------
 server/red-channel.h |  2 +-
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/server/red-channel.c b/server/red-channel.c
index 33d4158..55ab400 100644
--- a/server/red-channel.c
+++ b/server/red-channel.c
@@ -2248,15 +2248,17 @@ typedef int (*rcc_item_cond_t)(RedChannelClient *rcc, PipeItem *item);
  * @creator: a callback to create pipe item (not null)
  * @data: the data to pass to the creator
  * @pipe_add: a callback to add non-null pipe items (not null)
+ *
+ * Returns: the number of added items
  **/
-static void red_channel_pipes_create_batch(RedChannel *channel,
+static int red_channel_pipes_create_batch(RedChannel *channel,
                                 new_pipe_item_t creator, void *data,
                                 rcc_item_t pipe_add)
 {
     RingItem *link, *next;
     RedChannelClient *rcc;
     PipeItem *item;
-    int num = 0;
+    int num = 0, n = 0;
 
     spice_assert(creator != NULL);
     spice_assert(pipe_add != NULL);
@@ -2266,16 +2268,21 @@ static void red_channel_pipes_create_batch(RedChannel *channel,
         item = (*creator)(rcc, data, num++);
         if (item) {
             (*pipe_add)(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 791bc5b..fbb93b7 100644
--- a/server/red-channel.h
+++ b/server/red-channel.h
@@ -478,7 +478,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

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]