[Spice-devel] [spice-server 2/3] channel: Remove red_channel_client_disconnect_if_pending_send()

Christophe Fergeau cfergeau at redhat.com
Thu Aug 31 14:11:46 UTC 2017


There is exactly one user in RedChannel, and this can be reimplemented
using already public RedChannelClient API. No need for an extra
function.

Signed-off-by: Christophe Fergeau <cfergeau at redhat.com>
---
 server/red-channel-client.c |  9 ---------
 server/red-channel-client.h |  1 -
 server/red-channel.c        | 16 +++++++++++++++-
 3 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/server/red-channel-client.c b/server/red-channel-client.c
index 2612a6db4..061600df3 100644
--- a/server/red-channel-client.c
+++ b/server/red-channel-client.c
@@ -1824,15 +1824,6 @@ bool red_channel_client_wait_outgoing_item(RedChannelClient *rcc,
     }
 }
 
-void red_channel_client_disconnect_if_pending_send(RedChannelClient *rcc)
-{
-    if (red_channel_client_is_blocked(rcc) || !g_queue_is_empty(&rcc->priv->pipe)) {
-        red_channel_client_disconnect(rcc);
-    } else {
-        spice_assert(red_channel_client_no_item_being_sent(rcc));
-    }
-}
-
 gboolean red_channel_client_no_item_being_sent(RedChannelClient *rcc)
 {
     return !rcc || (rcc->priv->send_data.size == 0);
diff --git a/server/red-channel-client.h b/server/red-channel-client.h
index 3665daccd..6e03656b0 100644
--- a/server/red-channel-client.h
+++ b/server/red-channel-client.h
@@ -142,7 +142,6 @@ bool red_channel_client_wait_pipe_item_sent(RedChannelClient *rcc,
                                             int64_t timeout);
 bool red_channel_client_wait_outgoing_item(RedChannelClient *rcc,
                                            int64_t timeout);
-void red_channel_client_disconnect_if_pending_send(RedChannelClient *rcc);
 
 RedChannel* red_channel_client_get_channel(RedChannelClient *rcc);
 
diff --git a/server/red-channel.c b/server/red-channel.c
index b9d7f533d..f8fb4a3d3 100644
--- a/server/red-channel.c
+++ b/server/red-channel.c
@@ -647,6 +647,20 @@ uint32_t red_channel_sum_pipes_size(RedChannel *channel)
     return sum;
 }
 
+static void red_channel_disconnect_if_pending_send(RedChannel *channel)
+{
+    GList *it;
+
+    for (it = channel->priv->clients; it != NULL; it = it->next) {
+        RedChannelClient *rcc = RED_CHANNEL_CLIENT(it->data);
+        if (red_channel_client_is_blocked(rcc) || !red_channel_client_pipe_is_empty(rcc)) {
+            red_channel_client_disconnect(rcc);
+        } else {
+            spice_assert(red_channel_client_no_item_being_sent(rcc));
+        }
+    }
+}
+
 bool red_channel_wait_all_sent(RedChannel *channel,
                                int64_t timeout)
 {
@@ -674,7 +688,7 @@ bool red_channel_wait_all_sent(RedChannel *channel,
     if (max_pipe_size || blocked) {
         spice_warning("timeout: pending out messages exist (pipe-size %u, blocked %d)",
                       max_pipe_size, blocked);
-        red_channel_apply_clients(channel, red_channel_client_disconnect_if_pending_send);
+        red_channel_disconnect_if_pending_send(channel);
         return FALSE;
     } else {
         spice_assert(red_channel_no_item_being_sent(channel));
-- 
2.13.5



More information about the Spice-devel mailing list