From 05ad8be329fc054f48d277dedb53ffa185980224 Mon Sep 17 00:00:00 2001 From: Pierrick Bouvier Date: Thu, 14 May 2026 10:23:00 -0700 Subject: [PATCH] qom/object: initialize type_table in static ctor with fundamental QOM types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This saves us having to check if it's initialized everytime we have to access it. No other QOM type should be initialized or accessed during static ctor calls, so we don't depend on their ordering. Suggested-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson Link: https://lore.kernel.org/qemu-devel/20260514172303.1484273-3-pierrick.bouvier@oss.qualcomm.com Signed-off-by: Pierrick Bouvier --- qom/object.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/qom/object.c b/qom/object.c index b82b65a3a1..dfdc5c8e42 100644 --- a/qom/object.c +++ b/qom/object.c @@ -76,28 +76,19 @@ struct TypeImpl static Type type_interface; -static GHashTable *type_table_get(void) -{ - static GHashTable *type_table; - - if (type_table == NULL) { - type_table = g_hash_table_new(g_str_hash, g_str_equal); - } - - return type_table; -} +static GHashTable *type_table; static bool enumerating_types; static void type_table_add(TypeImpl *ti) { assert(!enumerating_types); - g_hash_table_insert(type_table_get(), (void *)ti->name, ti); + g_hash_table_insert(type_table, (void *)ti->name, ti); } static TypeImpl *type_table_lookup(const char *name) { - return g_hash_table_lookup(type_table_get(), name); + return g_hash_table_lookup(type_table, name); } static TypeImpl *type_new(const TypeInfo *info) @@ -1069,7 +1060,7 @@ void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque), OCFData data = { fn, implements_type, include_abstract, opaque }; enumerating_types = true; - g_hash_table_foreach(type_table_get(), object_class_foreach_tramp, &data); + g_hash_table_foreach(type_table, object_class_foreach_tramp, &data); enumerating_types = false; } @@ -2859,6 +2850,7 @@ static void __attribute__((constructor)) register_types(void) .abstract = true, }; + type_table = g_hash_table_new(g_str_hash, g_str_equal); type_interface = type_register_internal(&interface_info); type_register_internal(&object_info); }