aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Roth <mdroth@linux.vnet.ibm.com>2017-10-16 17:23:14 -0500
committerPaolo Bonzini <pbonzini@redhat.com>2017-10-18 10:34:50 +0200
commit2fc06c4ac65594ad248e9a9150ebdde9ff5a1253 (patch)
tree792b9842201ca6e2475018d6621b9995ce06cc64
parent04162f8f4bcf8c9ae2422def4357289b44208c8c (diff)
downloadqemu-2fc06c4ac65594ad248e9a9150ebdde9ff5a1253.zip
qemu-2fc06c4ac65594ad248e9a9150ebdde9ff5a1253.tar.gz
qemu-2fc06c4ac65594ad248e9a9150ebdde9ff5a1253.tar.bz2
Revert "qdev: Free QemuOpts when the QOM path goes away"
This reverts commit abed886ec60cf239a03515cf0b30fb11fa964c44. This patch originally addressed an issue where a DEVICE_DELETED event could be emitted (in device_unparent()) before a Device's QemuOpts were cleaned up (in device_finalize()), leading to a "duplicate ID" error if management attempted to immediately add a device with the same ID in response to the DEVICE_DELETED event. An alternative will be implemented in a subsequent patch where we defer the DEVICE_DELETED event until device_finalize(), which would also prevent the race, so we revert the original fix in preparation. Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> Reviewed-by: Greg Kurz <groug@kaod.org> Tested-by: Eric Auger <eric.auger@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Message-Id: <20171016222315.407-3-mdroth@linux.vnet.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--hw/core/qdev.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 0019a49..418cdac 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -1069,6 +1069,7 @@ static void device_finalize(Object *obj)
NamedGPIOList *ngl, *next;
DeviceState *dev = DEVICE(obj);
+ qemu_opts_del(dev->opts);
QLIST_FOREACH_SAFE(ngl, &dev->gpios, node, next) {
QLIST_REMOVE(ngl, node);
@@ -1118,9 +1119,6 @@ static void device_unparent(Object *obj)
g_free(dev->canonical_path);
dev->canonical_path = NULL;
}
-
- qemu_opts_del(dev->opts);
- dev->opts = NULL;
}
static void device_class_init(ObjectClass *class, void *data)