Commit afdbeb3dd3 for qemu.org
commit afdbeb3dd3e725cf91f49a0af22aa9a777008353
Author: Fabiano Rosas <farosas@suse.de>
Date: Mon Sep 14 21:01:56 2026 -0300
migration: Use migrate_params_free during finalize
Use the recently introduced migrate_params_free routine at
migration_instance_finalize() so that newly added pointers are already
freed by default.
Special case: The TLS options are currently the only pointers that
also have a qdev property implementation, so they will be freed by
qdev using the .release method. Update the method so that a second
invocation of qapi_free_StrOrNull doesn't assert.
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
diff --git a/migration/migration.c b/migration/migration.c
index d14beb5d22..fab7949fe1 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -4052,8 +4052,7 @@ static void migration_instance_finalize(Object *obj)
{
MigrationState *ms = MIGRATION(obj);
- qapi_free_BitmapMigrationNodeAliasList(ms->parameters.block_bitmap_mapping);
- qapi_free_strList(ms->parameters.cpr_exec_command);
+ migrate_params_free(&ms->parameters, NULL);
qemu_mutex_destroy(&ms->error_mutex);
qemu_mutex_destroy(&ms->qemu_file_lock);
qemu_sem_destroy(&ms->wait_unplug_sem);
diff --git a/migration/options.c b/migration/options.c
index bdcff002db..46d040fc3f 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -273,8 +273,9 @@ static void set_StrOrNull(Object *obj, Visitor *v, const char *name,
static void release_StrOrNull(Object *obj, const char *name, void *opaque)
{
- const Property *prop = opaque;
- qapi_free_StrOrNull(*(StrOrNull **)object_field_prop_ptr(obj, prop));
+ StrOrNull **ptr = object_field_prop_ptr(obj, opaque);
+
+ g_clear_pointer(ptr, qapi_free_StrOrNull);
}
static void set_default_value_tls_opt(ObjectProperty *op, const Property *prop)
@@ -1067,7 +1068,7 @@ AnnounceParameters *migrate_announce_params(void)
return ≈
}
-static bool migrate_params_free(MigrationParameters *params, Error **errp)
+bool migrate_params_free(MigrationParameters *params, Error **errp)
{
Visitor *v = qapi_dealloc_visitor_new();
bool ret;
diff --git a/migration/options.h b/migration/options.h
index c272eb6208..c7da2d0b5b 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -93,4 +93,5 @@ uint64_t migrate_rdma_chunk_size(void);
bool migrate_params_check(MigrationParameters *params, Error **errp);
void migrate_params_init(MigrationParameters *params);
+bool migrate_params_free(MigrationParameters *params, Error **errp);
#endif