From: Peter Xu Date: Mon, 1 Dec 2025 19:45:08 +0000 (-0500) Subject: migration: Make multifd_send_set_error() own the error X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bc8558307957ab7c826cd6d8f152d8e55aef8634;p=thirdparty%2Fqemu.git migration: Make multifd_send_set_error() own the error Make multifd_send_set_error() take ownership of the error always. Paving way for making migrate_set_error() to take ownership. When at it, rename it to multifd_send_error_propagate() to imply the ownership transition following Error API's naming style. Reviewed-by: Markus Armbruster Link: https://lore.kernel.org/r/20251201194510.1121221-6-peterx@redhat.com Signed-off-by: Peter Xu --- diff --git a/migration/multifd.c b/migration/multifd.c index 3203dc98e1..651ea3d14b 100644 --- a/migration/multifd.c +++ b/migration/multifd.c @@ -414,7 +414,7 @@ bool multifd_send(MultiFDSendData **send_data) } /* Multifd send side hit an error; remember it and prepare to quit */ -static void multifd_send_set_error(Error *err) +static void multifd_send_error_propagate(Error *err) { /* * We don't want to exit each threads twice. Depending on where @@ -429,6 +429,7 @@ static void multifd_send_set_error(Error *err) if (err) { MigrationState *s = migrate_get_current(); migrate_set_error(s, err); + error_free(err); if (s->state == MIGRATION_STATUS_SETUP || s->state == MIGRATION_STATUS_PRE_SWITCHOVER || s->state == MIGRATION_STATUS_DEVICE || @@ -777,9 +778,8 @@ out: if (ret) { assert(local_err); trace_multifd_send_error(p->id); - multifd_send_set_error(local_err); + multifd_send_error_propagate(local_err); multifd_send_kick_main(p); - error_free(local_err); } rcu_unregister_thread(); @@ -901,14 +901,13 @@ out: } trace_multifd_new_send_channel_async_error(p->id, local_err); - multifd_send_set_error(local_err); + multifd_send_error_propagate(local_err); /* * For error cases (TLS or non-TLS), IO channel is always freed here * rather than when cleanup multifd: since p->c is not set, multifd * cleanup code doesn't even know its existence. */ object_unref(OBJECT(ioc)); - error_free(local_err); } static bool multifd_new_send_channel_create(gpointer opaque, Error **errp)