Track the migration session earlier, so that disconnecting before migration finished will abort and release it. --- gtk/channel-main.c | 2 +- gtk/spice-session-priv.h | 1 - gtk/spice-session.c | 12 ++++++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/gtk/channel-main.c b/gtk/channel-main.c index 873487b..7cc7630 100644 --- a/gtk/channel-main.c +++ b/gtk/channel-main.c @@ -2079,6 +2079,7 @@ static gboolean migrate_connect(gpointer data) mig->session = spice_session_new_from_session(session); mig->session->priv->migration_copy = true; spice_session_set_migration_state(mig->session, SPICE_SESSION_MIGRATION_CONNECTING); + session->priv->migration = g_object_ref(mig->session); if ((c->peer_hdr.major_version == 1) && (c->peer_hdr.minor_version < 1)) { @@ -2179,7 +2180,6 @@ static void main_migrate_connect(SpiceChannel *channel, reply_type = SPICE_MSGC_MAIN_MIGRATE_CONNECTED; } spice_session_set_migration(spice_channel_get_session(channel), - mig.session, mig.do_seamless); } g_object_unref(mig.session); diff --git a/gtk/spice-session-priv.h b/gtk/spice-session-priv.h index da43866..d6511a1 100644 --- a/gtk/spice-session-priv.h +++ b/gtk/spice-session-priv.h @@ -139,7 +139,6 @@ guint32 spice_session_get_mm_time(SpiceSession *session); void spice_session_switching_disconnect(SpiceSession *session); void spice_session_set_migration(SpiceSession *session, - SpiceSession *migration, gboolean full_migration); void spice_session_abort_migration(SpiceSession *session); void spice_session_set_migration_state(SpiceSession *session, SpiceSessionMigration state); diff --git a/gtk/spice-session.c b/gtk/spice-session.c index 3e3f16d..ad19d93 100644 --- a/gtk/spice-session.c +++ b/gtk/spice-session.c @@ -1392,21 +1392,21 @@ void spice_session_switching_disconnect(SpiceSession *self) G_GNUC_INTERNAL void spice_session_set_migration(SpiceSession *session, - SpiceSession *migration, gboolean full_migration) { SpiceSessionPrivate *s = session->priv; - SpiceSessionPrivate *m = migration->priv; + SpiceSessionPrivate *m; gchar *tmp; - g_return_if_fail(s != NULL); + g_return_if_fail(s->migration != NULL); + m = s->migration->priv; + g_return_if_fail(m->migration_state == SPICE_SESSION_MIGRATION_CONNECTING); + s->full_migration = full_migration; spice_session_set_migration_state(session, SPICE_SESSION_MIGRATION_MIGRATING); - g_warn_if_fail(s->migration == NULL); - s->migration = g_object_ref(migration); - + /* swapping connection details happens after MIGRATION_CONNECTING state */ tmp = s->host; s->host = m->host; m->host = tmp; -- 1.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel