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 <quintela@redhat.com>
Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
Juan Quintela 2017-07-24 13:06:25 +02:00
parent 8e1a1931ca
commit 428d89084c
3 changed files with 20 additions and 3 deletions

View File

@ -384,6 +384,17 @@ void migration_ioc_process_incoming(QIOChannel *ioc)
/* We still only have a single channel. Nothing to do here yet */ /* 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 * 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 * to indicate that we've finished with the RP. Non-0 value indicates

View File

@ -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_fd_process_incoming(QEMUFile *f);
void migration_ioc_process_incoming(QIOChannel *ioc); void migration_ioc_process_incoming(QIOChannel *ioc);
bool migration_has_all_channels(void);
uint64_t migrate_max_downtime(void); uint64_t migrate_max_downtime(void);
void migrate_fd_error(MigrationState *s, const Error *error); void migrate_fd_error(MigrationState *s, const Error *error);

View File

@ -152,9 +152,13 @@ static gboolean socket_accept_incoming_migration(QIOChannel *ioc,
object_unref(OBJECT(sioc)); object_unref(OBJECT(sioc));
out: out:
if (migration_has_all_channels()) {
/* Close listening socket as its no longer needed */ /* Close listening socket as its no longer needed */
qio_channel_close(ioc, NULL); qio_channel_close(ioc, NULL);
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} else {
return G_SOURCE_CONTINUE;
}
} }