mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
qom: Detect bad reentrance during object_class_foreach()
We should not modify the type hash table while it is being iterated on. Assert that it does not happen. Signed-off-by: Hervé Poussineau <hpoussin@reactos.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
committed by
Andreas Färber
parent
14389dbd02
commit
f54c19cacb
@@ -78,8 +78,11 @@ static GHashTable *type_table_get(void)
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -670,7 +673,9 @@ 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);
|
||||
enumerating_types = false;
|
||||
}
|
||||
|
||||
int object_child_foreach(Object *obj, int (*fn)(Object *child, void *opaque),
|
||||
|
||||
Reference in New Issue
Block a user