[Spice-devel,spice-gtk,v2,04/19] migration: set session migration during connect

Submitted by marcandre.lureau@redhat.com on Nov. 13, 2014, 11:32 p.m.

Details

Message ID 1415921562-6267-5-git-send-email-marcandre.lureau@redhat.com
State Accepted
Commit 83552a6eec43ce2fb9f55003f2deb40e919f97db
Headers show

Not browsing as part of any series.

Commit Message

marcandre.lureau@redhat.com Nov. 13, 2014, 11:32 p.m.
Track the migration session earlier, so that disconnecting before
migration finished will abort and release it.
---
 gtk/channel-main.c       |  6 +++---
 gtk/spice-session-priv.h |  5 ++---
 gtk/spice-session.c      | 16 ++++++++--------
 3 files changed, 13 insertions(+), 14 deletions(-)

Patch hide | download patch | download mbox

diff --git a/gtk/channel-main.c b/gtk/channel-main.c
index 873487b..d4a7d24 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)) {
@@ -2178,9 +2179,8 @@  static void main_migrate_connect(SpiceChannel *channel,
             SPICE_DEBUG("migration (semi-seamless): connections all ok");
             reply_type = SPICE_MSGC_MAIN_MIGRATE_CONNECTED;
         }
-        spice_session_set_migration(spice_channel_get_session(channel),
-                                    mig.session,
-                                    mig.do_seamless);
+        spice_session_start_migrating(spice_channel_get_session(channel),
+                                      mig.do_seamless);
     }
     g_object_unref(mig.session);
 
diff --git a/gtk/spice-session-priv.h b/gtk/spice-session-priv.h
index da43866..8e102e0 100644
--- a/gtk/spice-session-priv.h
+++ b/gtk/spice-session-priv.h
@@ -138,9 +138,8 @@  void spice_session_set_mm_time(SpiceSession *session, guint32 time);
 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_start_migrating(SpiceSession *session,
+                                   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..42ad280 100644
--- a/gtk/spice-session.c
+++ b/gtk/spice-session.c
@@ -1391,22 +1391,22 @@  void spice_session_switching_disconnect(SpiceSession *self)
 }
 
 G_GNUC_INTERNAL
-void spice_session_set_migration(SpiceSession *session,
-                                 SpiceSession *migration,
-                                 gboolean full_migration)
+void spice_session_start_migrating(SpiceSession *session,
+                                   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;