[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