[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