diff options
Diffstat (limited to 'gtk/channel-base.c')
-rw-r--r-- | 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, |