[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