[Spice-devel] [spice-server] wip: to better sync server and client tokens
Victor Toso
victortoso at redhat.com
Fri Jun 3 13:16:07 UTC 2016
---
server/char-device.c | 6 ++++++
server/reds.c | 8 ++------
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/server/char-device.c b/server/char-device.c
index cb35aa2..84efdfb 100644
--- a/server/char-device.c
+++ b/server/char-device.c
@@ -851,6 +851,12 @@ void red_char_device_reset(RedCharDevice *dev)
dev_client->num_send_tokens += g_queue_get_length(dev_client->send_queue);
g_queue_foreach(dev_client->send_queue, (GFunc)red_pipe_item_unref, NULL);
g_queue_clear(dev_client->send_queue);
+
+ /* FIXME: WIP patch: If the device is reset and we clear all the
+ * WriteBuffers, we must garantee that the number of tokens is exactly
+ * the same that we will send to the client upon agent re-connection. */
+ dev_client->num_client_tokens += dev_client->num_client_tokens_free;
+ dev_client->num_client_tokens_free = 0;
}
red_char_device_reset_dev_instance(dev, NULL);
}
diff --git a/server/reds.c b/server/reds.c
index 4fd1d35..1cd697d 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -553,12 +553,8 @@ static void reds_reset_vdp(RedsState *reds)
* In addition, there used to be a misshandling of AGENT_TOKENS message in spice-gtk: it
* overrides the amount of tokens, instead of adding the given amount.
*/
- if (red_channel_test_remote_cap(&reds->main_channel->base,
- SPICE_MAIN_CAP_AGENT_CONNECTED_TOKENS)) {
- dev->priv->agent_attached = FALSE;
- } else {
- red_char_device_reset(RED_CHAR_DEVICE(dev));
- }
+ dev->priv->agent_attached = FALSE;
+ red_char_device_reset(RED_CHAR_DEVICE(dev));
sif = spice_char_device_get_interface(reds->vdagent);
if (sif->state) {
--
2.5.5
More information about the Spice-devel
mailing list