[Spice-devel] [PATCH spice-gtk 04/13] migration: set session migration during connect

Marc-André Lureau marcandre.lureau at redhat.com
Sun Nov 9 08:31:36 PST 2014


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



More information about the Spice-devel mailing list