On Wed, Dec 4, 2013 at 1:42 AM, Paolo Bonzini <pbonz...@redhat.com> wrote: > 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> > --- > qom/object.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/qom/object.c b/qom/object.c > index 3a43186..1dee9f0 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 = false;
Global variable could probably use a more descriptive name. Regards, Peter > static void type_table_add(TypeImpl *ti) > { > + assert(!enumerating); > 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 = true; > g_hash_table_foreach(type_table_get(), object_class_foreach_tramp, > &data); > + enumerating = false; > } > > int object_child_foreach(Object *obj, int (*fn)(Object *child, void *opaque), > -- > 1.8.4.2 > >