In order to save migration time, and probably also decrease migration
data size, we push the flush mark to the src server before any other
message. All the other pending msgs will be sent later to the
destination server (see next patch).
---
 gtk/channel-base.c |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/gtk/channel-base.c b/gtk/channel-base.c
index 2968f42..d7a5461 100644
--- a/gtk/channel-base.c
+++ b/gtk/channel-base.c
@@ -157,12 +157,9 @@ void spice_channel_handle_migrate(SpiceChannel *channel, 
SpiceMsgIn *in)
 
     SPICE_DEBUG("%s: channel %s flags %u", __FUNCTION__, c->name, mig->flags);
     if (mig->flags & SPICE_MIGRATE_NEED_FLUSH) {
-        /* iterate_write is blocking and flushing all pending write */
-        SPICE_CHANNEL_GET_CLASS(channel)->iterate_write(channel);
-
+        /* pushing the mark msg before all other messgages and sending it, and 
only it */
         out = spice_msg_out_new(SPICE_CHANNEL(channel), 
SPICE_MSGC_MIGRATE_FLUSH_MARK);
         spice_msg_out_send_internal(out);
-        SPICE_CHANNEL_GET_CLASS(channel)->iterate_write(channel);
     }
     if (mig->flags & SPICE_MIGRATE_NEED_DATA_TRANSFER) {
         spice_channel_recv_msg(channel, get_msg_handler, &data);
@@ -175,8 +172,10 @@ void spice_channel_handle_migrate(SpiceChannel *channel, 
SpiceMsgIn *in)
         }
     }
 
+    /* swapping channels sockets */
     spice_session_channel_migrate(c->session, channel);
 
+    /* pushing the MIGRATE_DATA before all other pending messages */
     if ((mig->flags & SPICE_MIGRATE_NEED_DATA_TRANSFER) && (data != NULL)) {
         out = spice_msg_out_new(SPICE_CHANNEL(channel), 
SPICE_MSGC_MIGRATE_DATA);
         spice_marshaller_add(out->marshaller, data->data,
-- 
1.7.7.6

_______________________________________________
Spice-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to