[Spice-devel] [PATCH 5/8] Simplify serial sending packets

Frediano Ziglio fziglio at redhat.com
Mon Sep 19 08:30:00 UTC 2016


serial was the future serial to send while last_sent_serial was the
last sent.
serial sent started from 1.
To make sure sequence variable is updated just before sending the
message, not every message prepared.

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 server/red-channel-client-private.h |  1 -
 server/red-channel-client.c         | 31 +++++--------------------------
 2 files changed, 5 insertions(+), 27 deletions(-)

diff --git a/server/red-channel-client-private.h b/server/red-channel-client-private.h
index 532bfa3..c169f62 100644
--- a/server/red-channel-client-private.h
+++ b/server/red-channel-client-private.h
@@ -43,7 +43,6 @@ struct RedChannelClientPrivate
         uint32_t size;
         RedPipeItem *item;
         int blocked;
-        uint64_t serial;
         uint64_t last_sent_serial;
 
         struct {
diff --git a/server/red-channel-client.c b/server/red-channel-client.c
index 4108be0..1c2fb15 100644
--- a/server/red-channel-client.c
+++ b/server/red-channel-client.c
@@ -166,26 +166,9 @@ static void red_channel_client_reset_send_data(RedChannelClient *rcc)
     rcc->priv->send_data.header.set_msg_type(&rcc->priv->send_data.header, 0);
     rcc->priv->send_data.header.set_msg_size(&rcc->priv->send_data.header, 0);
 
-    /* Keeping the serial consecutive: resetting it if reset_send_data
-     * has been called before, but no message has been sent since then.
-     */
-    if (rcc->priv->send_data.last_sent_serial != rcc->priv->send_data.serial) {
-        spice_assert(rcc->priv->send_data.serial - rcc->priv->send_data.last_sent_serial == 1);
-        /*  When the urgent marshaller is active, the serial was incremented by
-         *  the call to reset_send_data that was made for the main marshaller.
-         *  The urgent msg receives this serial, and the main msg serial is
-         *  the following one. Thus, (rcc->priv->send_data.serial - rcc->priv->send_data.last_sent_serial)
-         *  should be 1 in this case*/
-        if (!red_channel_client_urgent_marshaller_is_active(rcc)) {
-            rcc->priv->send_data.serial = rcc->priv->send_data.last_sent_serial;
-        }
-    }
-    rcc->priv->send_data.serial++;
-
     if (!rcc->priv->is_mini_header) {
         spice_assert(rcc->priv->send_data.marshaller != rcc->priv->send_data.urgent.marshaller);
         rcc->priv->send_data.header.set_msg_sub_list(&rcc->priv->send_data.header, 0);
-        rcc->priv->send_data.header.set_msg_serial(&rcc->priv->send_data.header, rcc->priv->send_data.serial);
     }
 }
 
@@ -304,10 +287,6 @@ static void red_channel_client_restore_main_sender(RedChannelClient *rcc)
     spice_marshaller_reset(rcc->priv->send_data.urgent.marshaller);
     rcc->priv->send_data.marshaller = rcc->priv->send_data.main.marshaller;
     rcc->priv->send_data.header.data = rcc->priv->send_data.main.header_data;
-    if (!rcc->priv->is_mini_header) {
-        rcc->priv->send_data.header.set_msg_serial(&rcc->priv->send_data.header,
-                                                   rcc->priv->send_data.serial);
-    }
     rcc->priv->send_data.item = rcc->priv->send_data.main.item;
 }
 
@@ -589,7 +568,7 @@ static void full_header_set_msg_serial(SpiceDataHeaderOpaque *header, uint64_t s
 
 static void mini_header_set_msg_serial(SpiceDataHeaderOpaque *header, uint64_t serial)
 {
-    spice_error("attempt to set header serial on mini header");
+    /* ignore serial, not supported by mini header */
 }
 
 static void full_header_set_msg_sub_list(SpiceDataHeaderOpaque *header, uint32_t sub_list)
@@ -1254,8 +1233,9 @@ void red_channel_client_begin_send_message(RedChannelClient *rcc)
     rcc->priv->send_data.header.set_msg_size(&rcc->priv->send_data.header,
                                              rcc->priv->send_data.size -
                                              rcc->priv->send_data.header.header_size);
+    rcc->priv->send_data.header.set_msg_serial(&rcc->priv->send_data.header,
+                                               ++rcc->priv->send_data.last_sent_serial);
     rcc->priv->ack_data.messages_window++;
-    rcc->priv->send_data.last_sent_serial = rcc->priv->send_data.serial;
     rcc->priv->send_data.header.data = NULL; /* avoid writing to this until we have a new message */
     red_channel_client_send(rcc);
 }
@@ -1275,13 +1255,12 @@ SpiceMarshaller *red_channel_client_switch_to_urgent_sender(RedChannelClient *rc
 
 uint64_t red_channel_client_get_message_serial(RedChannelClient *rcc)
 {
-    return rcc->priv->send_data.serial;
+    return rcc->priv->send_data.last_sent_serial + 1;
 }
 
 void red_channel_client_set_message_serial(RedChannelClient *rcc, uint64_t serial)
 {
-    rcc->priv->send_data.last_sent_serial = serial;
-    rcc->priv->send_data.serial = serial;
+    rcc->priv->send_data.last_sent_serial = serial - 1;
 }
 
 static inline gboolean client_pipe_add(RedChannelClient *rcc, RedPipeItem *item, RingItem *pos)
-- 
2.7.4



More information about the Spice-devel mailing list