From 2a543bfdfadb432d82bab256a9a72b00c331b484 Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Mon, 24 Jul 2017 12:51:59 +0200 Subject: migration: Teach it about G_SOURCE_REMOVE As this is defined on glib 2.32, add compatibility macros for older glibs. Signed-off-by: Juan Quintela Reviewed-by: Daniel P. Berrange Reviewed-by: Peter Xu --- migration/socket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'migration/socket.c') diff --git a/migration/socket.c b/migration/socket.c index 757d3821a1..b02d37d7a3 100644 --- a/migration/socket.c +++ b/migration/socket.c @@ -154,7 +154,7 @@ static gboolean socket_accept_incoming_migration(QIOChannel *ioc, out: /* Close listening socket as its no longer needed */ qio_channel_close(ioc, NULL); - return FALSE; /* unregister */ + return G_SOURCE_REMOVE; } -- cgit 1.4.1 From 428d89084c709e568f9cd301c2f6416a54c53d6d Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Mon, 24 Jul 2017 13:06:25 +0200 Subject: migration: Create migration_has_all_channels This function allows us to decide when to close the listener socket. For now, we only need one connection. Signed-off-by: Juan Quintela Reviewed-by: Daniel P. Berrange --- migration/migration.c | 11 +++++++++++ migration/migration.h | 2 ++ migration/socket.c | 10 +++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) (limited to 'migration/socket.c') diff --git a/migration/migration.c b/migration/migration.c index 2d4c56e612..bac4a99277 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -384,6 +384,17 @@ void migration_ioc_process_incoming(QIOChannel *ioc) /* We still only have a single channel. Nothing to do here yet */ } +/** + * @migration_has_all_channels: We have received all channels that we need + * + * Returns true when we have got connections to all the channels that + * we need for migration. + */ +bool migration_has_all_channels(void) +{ + return true; +} + /* * Send a 'SHUT' message on the return channel with the given value * to indicate that we've finished with the RP. Non-0 value indicates diff --git a/migration/migration.h b/migration/migration.h index 99c398d484..1881e4a754 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -155,6 +155,8 @@ void migrate_set_state(int *state, int old_state, int new_state); void migration_fd_process_incoming(QEMUFile *f); void migration_ioc_process_incoming(QIOChannel *ioc); +bool migration_has_all_channels(void); + uint64_t migrate_max_downtime(void); void migrate_fd_error(MigrationState *s, const Error *error); diff --git a/migration/socket.c b/migration/socket.c index b02d37d7a3..dee869044a 100644 --- a/migration/socket.c +++ b/migration/socket.c @@ -152,9 +152,13 @@ static gboolean socket_accept_incoming_migration(QIOChannel *ioc, object_unref(OBJECT(sioc)); out: - /* Close listening socket as its no longer needed */ - qio_channel_close(ioc, NULL); - return G_SOURCE_REMOVE; + if (migration_has_all_channels()) { + /* Close listening socket as its no longer needed */ + qio_channel_close(ioc, NULL); + return G_SOURCE_REMOVE; + } else { + return G_SOURCE_CONTINUE; + } } -- cgit 1.4.1