channel: Remove red_channel_client_disconnect_if_pending_send()

There is exactly one user in RedChannel, and this can be reimplemented
using already public RedChannelClient API. No need for an extra
function very specialized function with a not great name.

This commit thus removes one method from RedChannelClient public API,
and replaces it with an equivalent private helper in RedChannel.

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
This commit is contained in:
Christophe Fergeau 2017-08-31 09:35:58 +02:00
parent 685a6288f3
commit 1b7fca87b6
3 changed files with 14 additions and 11 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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));