Michael, Thanks for the review. I added the unparent to the qdev_free.
--- hw/qdev.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/hw/qdev.c b/hw/qdev.c index d2dc28b..ed1328d 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -264,6 +264,7 @@ void qdev_init_nofail(DeviceState *dev) /* Unlink device from bus and free the structure. */ void qdev_free(DeviceState *dev) { + object_unparent(OBJECT(dev)); object_delete(OBJECT(dev)); } -- 1.7.1 -----Original Message----- From: Michael S. Tsirkin [mailto:m...@redhat.com] Sent: Tuesday, June 12, 2012 1:27 AM To: Ma, Stephen B. Cc: 'qemu-devel@nongnu.org' Subject: Re: [PATCH] Fix for qemu crash on assertion error when adding PCI passthru device. On Tue, Jun 12, 2012 at 04:31:20AM +0000, Ma, Stephen B. wrote: > diff --git a/hw/qdev.c b/hw/qdev.c > index 6a8f6bd..d2dc28b 100644 > --- a/hw/qdev.c > +++ b/hw/qdev.c > @@ -139,7 +139,7 @@ DeviceState *qdev_try_create(BusState *bus, const char > *type) > /* Initialize a device. Device properties should be set before calling > this function. IRQs and MMIO regions should be connected/mapped after > calling this function. > - On failure, destroy the device and return negative value. > + On failure, return a negative value. > Return 0 on success. */ > int qdev_init(DeviceState *dev) > { Yes, I agree. qdev_init did now allocate the device so it should not free it. > @@ -150,7 +150,6 @@ int qdev_init(DeviceState *dev) > > rc = dc->init(dev); > if (rc < 0) { > - qdev_free(dev); > return rc; > } > Another thing we need to fix is unparent the device in qdev_free. -- MST