blocked is set only on output block.
---
server/red_channel.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/server/red_channel.c b/server/red_channel.c
index 9ad2e5a..0eba73c 100644
--- a/server/red_channel.c
+++ b/server/red_channel.c
@@ -574,18 +574,20 @@ void red_channel_pipe_add_type(RedChannel *channel, int
pipe_item_type)
red_channel_push(channel);
}
+static inline int red_channel_waiting_for_ack(RedChannel *channel)
+{
+ return (channel->handle_acks && (channel->ack_data.messages_window >
channel->ack_data.client_window * 2));
+}
+
static inline PipeItem *red_channel_pipe_get(RedChannel *channel)
{
PipeItem *item;
if (!channel || channel->send_data.blocked ||
+ red_channel_waiting_for_ack(channel) ||
!(item = (PipeItem *)ring_get_tail(&channel->pipe))) {
return NULL;
}
- if (channel->handle_acks && (channel->ack_data.messages_window >
channel->ack_data.client_window * 2)) {
- channel->send_data.blocked = TRUE;
- return NULL;
- }
--channel->pipe_size;
ring_remove(&item->link);
return item;
--
1.7.3.4
_______________________________________________
Spice-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/spice-devel