From: Hervé Poussineau <hpous...@reactos.org> 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 <hpous...@reactos.org> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> Signed-off-by: Igor Mammedov <imamm...@redhat.com> --- v2: * make ver more descriptinve s/enumerating/enumerating_classes/ [asked-by: Peter Crosthwaite] --- qom/object.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/qom/object.c b/qom/object.c index 3a43186..4a0fb86 100644 --- a/qom/object.c +++ b/qom/object.c @@ -78,8 +78,10 @@ static GHashTable *type_table_get(void) return type_table; } +static bool enumerating_classes = false; static void type_table_add(TypeImpl *ti) { + assert(!enumerating_classes); g_hash_table_insert(type_table_get(), (void *)ti->name, ti); } @@ -666,7 +668,9 @@ void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque), { OCFData data = { fn, implements_type, include_abstract, opaque }; + enumerating_classes = true; g_hash_table_foreach(type_table_get(), object_class_foreach_tramp, &data); + enumerating_classes = false; } int object_child_foreach(Object *obj, int (*fn)(Object *child, void *opaque), -- 1.8.3.1