[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 17/24] qom: Detect bad reentrance during object_cl
From: |
Andreas Färber |
Subject: |
[Qemu-devel] [PULL v2 17/24] qom: Detect bad reentrance during object_class_foreach() |
Date: |
Tue, 24 Dec 2013 18:04:28 +0100 |
From: Hervé Poussineau <address@hidden>
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 <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
Signed-off-by: Alexey Kardashevskiy <address@hidden>
Signed-off-by: Andreas Färber <address@hidden>
---
qom/object.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/qom/object.c b/qom/object.c
index 470a1ac..2aab30b 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -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),
--
1.8.4
- [Qemu-devel] [PULL v2 01/24] qdev: Replace no_user by cannot_instantiate_with_device_add_yet, (continued)
- [Qemu-devel] [PULL v2 01/24] qdev: Replace no_user by cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 08/24] vt82c686: Clean up use of cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 07/24] piix3 piix4: Clean up use of cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 11/24] qdev-monitor: Avoid device_add crashing on non-device driver name, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 12/24] hw: cannot_instantiate_with_device_add_yet due to pointer props, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 15/24] qom: Do not register interface "types" in the type table and fix names, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 09/24] isa: Clean up use of cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 10/24] qdev: Do not let the user try to device_add when it cannot work, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 13/24] qdev: Document that pointer properties kill device_add, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 16/24] tests: Test QOM interface casting, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 17/24] qom: Detect bad reentrance during object_class_foreach(),
Andreas Färber <=
- [Qemu-devel] [PULL v2 18/24] qdev: Drop misleading qbus_free() function, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 21/24] icc_bus: QOM'ify ICC, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 20/24] apic: QOM'ify APIC, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 19/24] apic: Cleanup for QOM'ification, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 22/24] ioapic: Cleanup for QOM'ification, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 23/24] ioapic: QOM'ify ioapic, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 24/24] qdev-monitor: Improve error message for -device nonexistant, Andreas Färber, 2013/12/24