[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 17/24] qom: Detect bad reentrance during object_class
From: |
Andreas Färber |
Subject: |
[Qemu-devel] [PULL 17/24] qom: Detect bad reentrance during object_class_foreach() |
Date: |
Tue, 24 Dec 2013 17:57:10 +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 08/24] vt82c686: Clean up use of cannot_instantiate_with_device_add_yet, (continued)
- [Qemu-devel] [PULL 08/24] vt82c686: Clean up use of cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 11/24] qdev-monitor: Avoid device_add crashing on non-device driver name, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 06/24] ich9: Document why cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 02/24] sysbus: Set cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 04/24] apic: Document why cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 05/24] pci-host: Consistently set cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 14/24] qom: Split out object and class caches, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 07/24] piix3 piix4: Clean up use of cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 09/24] isa: Clean up use of cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 01/24] qdev: Replace no_user by cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 17/24] qom: Detect bad reentrance during object_class_foreach(),
Andreas Färber <=
- [Qemu-devel] [PULL 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 12/24] hw: cannot_instantiate_with_device_add_yet due to pointer props, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 15/24] qom: Do not register interface "types" in the type table and fix names, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 13/24] qdev: Document that pointer properties kill device_add, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 16/24] tests: Test QOM interface casting, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 18/24] qdev: Drop misleading qbus_free() function, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 21/24] icc_bus: QOM'ify ICC, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 24/24] qdev-monitor: Improve error message for -device nonexistant, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 23/24] ioapic: QOM'ify ioapic, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL 22/24] ioapic: Cleanup for QOM'ification, Andreas Färber, 2013/12/24