diff --git a/server/red-channel-client.c b/server/red-channel-client.c index 34202c49..8f730862 100644 --- a/server/red-channel-client.c +++ b/server/red-channel-client.c @@ -1848,15 +1848,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 f5e04df7..732fbdd5 100644 --- a/server/red-channel-client.h +++ b/server/red-channel-client.h @@ -143,7 +143,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 c24b9772..b8f4f54e 100644 --- a/server/red-channel.c +++ b/server/red-channel.c @@ -627,6 +627,19 @@ uint32_t red_channel_sum_pipes_size(RedChannel *channel) return sum; } +static void red_channel_disconnect_if_pending_send(RedChannel *channel) +{ + RedChannelClient *rcc; + + FOREACH_CLIENT(channel, rcc) { + 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) { @@ -654,7 +667,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));