mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:10 +00:00
qom/object: initialize type_table in static ctor with fundamental QOM types
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 <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Link: https://lore.kernel.org/qemu-devel/20260514172303.1484273-3-pierrick.bouvier@oss.qualcomm.com Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
This commit is contained in:
16
qom/object.c
16
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 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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user