migration/multifd: Cleanup outgoing_args in state destroy

outgoing_args is a global cache of socket address to be reused in multifd.
Freeing the cache in per-channel destructor is more or less a hack.  Move
it to multifd_send_cleanup_state() so it only get checked once.  Use a
small helper to do so because it's internal of socket.c.

Reviewed-by: Fabiano Rosas <farosas@suse.de>
Link: https://lore.kernel.org/r/20240222095301.171137-5-peterx@redhat.com
Signed-off-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
Peter Xu 2024-02-22 17:53:00 +08:00
parent 770de49c00
commit 72b90b9687
3 changed files with 11 additions and 4 deletions

View File

@ -689,6 +689,7 @@ static bool multifd_send_cleanup_channel(MultiFDSendParams *p, Error **errp)
static void multifd_send_cleanup_state(void) static void multifd_send_cleanup_state(void)
{ {
socket_cleanup_outgoing_migration();
qemu_sem_destroy(&multifd_send_state->channels_created); qemu_sem_destroy(&multifd_send_state->channels_created);
qemu_sem_destroy(&multifd_send_state->channels_ready); qemu_sem_destroy(&multifd_send_state->channels_ready);
g_free(multifd_send_state->params); g_free(multifd_send_state->params);

View File

@ -64,10 +64,6 @@ int socket_send_channel_destroy(QIOChannel *send)
{ {
/* Remove channel */ /* Remove channel */
object_unref(OBJECT(send)); object_unref(OBJECT(send));
if (outgoing_args.saddr) {
qapi_free_SocketAddress(outgoing_args.saddr);
outgoing_args.saddr = NULL;
}
return 0; return 0;
} }
@ -137,6 +133,14 @@ void socket_start_outgoing_migration(MigrationState *s,
NULL); NULL);
} }
void socket_cleanup_outgoing_migration(void)
{
if (outgoing_args.saddr) {
qapi_free_SocketAddress(outgoing_args.saddr);
outgoing_args.saddr = NULL;
}
}
static void socket_accept_incoming_migration(QIONetListener *listener, static void socket_accept_incoming_migration(QIONetListener *listener,
QIOChannelSocket *cioc, QIOChannelSocket *cioc,
gpointer opaque) gpointer opaque)

View File

@ -29,4 +29,6 @@ void socket_start_incoming_migration(SocketAddress *saddr, Error **errp);
void socket_start_outgoing_migration(MigrationState *s, void socket_start_outgoing_migration(MigrationState *s,
SocketAddress *saddr, Error **errp); SocketAddress *saddr, Error **errp);
void socket_cleanup_outgoing_migration(void);
#endif #endif