summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2010-11-07 12:33:28 +0200
committerAlon Levy <alevy@redhat.com>2010-11-07 12:35:22 +0200
commit40b2e48daf7eb13be23cf7dfa0bbde14d6e7397d (patch)
tree79ee3e3005cec8313c1c4d0fe20466b65149d785
parent64d1deed403a39a684949ff604d563133e0cec3d (diff)
downloadspice-40b2e48daf7eb13be23cf7dfa0bbde14d6e7397d.tar.gz
spice-40b2e48daf7eb13be23cf7dfa0bbde14d6e7397d.tar.xz
spice-40b2e48daf7eb13be23cf7dfa0bbde14d6e7397d.zip
server/red_channel: make client ack window configurable (from red_worker)
-rw-r--r--server/red_channel.c6
-rw-r--r--server/red_channel.h1
2 files changed, 5 insertions, 2 deletions
diff --git a/server/red_channel.c b/server/red_channel.c
index 82181d6d..7a80862c 100644
--- a/server/red_channel.c
+++ b/server/red_channel.c
@@ -274,6 +274,7 @@ RedChannel *red_channel_create(int size, RedsStreamContext *peer,
channel->ack_data.messages_window = ~0; // blocks send message (maybe use send_data.blocked +
// block flags)
channel->ack_data.client_generation = ~0;
+ channel->ack_data.client_window = CLIENT_ACK_WINDOW;
channel->migrate = migrate;
ring_init(&channel->pipe);
@@ -398,7 +399,7 @@ int red_channel_handle_message(RedChannel *channel, uint32_t size,
break;
case SPICE_MSGC_ACK:
if (channel->ack_data.client_generation == channel->ack_data.generation) {
- channel->ack_data.messages_window -= CLIENT_ACK_WINDOW;
+ channel->ack_data.messages_window -= channel->ack_data.client_window;
red_channel_push(channel);
}
break;
@@ -546,7 +547,8 @@ static PipeItem *red_channel_pipe_get(RedChannel *channel)
PipeItem *item;
if (!channel || channel->send_data.blocked ||
- (channel->handle_acks && (channel->ack_data.messages_window > CLIENT_ACK_WINDOW * 2)) ||
+ (channel->handle_acks &&
+ (channel->ack_data.messages_window > channel->ack_data.client_window * 2)) ||
!(item = (PipeItem *)ring_get_tail(&channel->pipe))) {
return NULL;
}
diff --git a/server/red_channel.h b/server/red_channel.h
index e4b46554..65064c42 100644
--- a/server/red_channel.h
+++ b/server/red_channel.h
@@ -126,6 +126,7 @@ struct RedChannel {
uint32_t generation;
uint32_t client_generation;
uint32_t messages_window;
+ uint32_t client_window;
} ack_data;
Ring pipe;