From 71b8a56599eef36d15d7b3c34229af722ff3745d Mon Sep 17 00:00:00 2001 From: Yonit Halperin Date: Tue, 7 Aug 2012 12:36:57 +0300 Subject: seamless migration: transfer pending msgs to the destination, instead of sending them to the src before FLUSH_MARK 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 file 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, -- cgit v1.2.3