summaryrefslogtreecommitdiff
path: root/hw/usb
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@redhat.com>2013-09-11 14:54:09 +0200
committerAndreas Färber <afaerber@suse.de>2013-11-05 18:06:38 +0100
commit02a5c4c97422b40034f31265e0f139f7846172a8 (patch)
treed3f871e5f4c0661e231c5bbb60d03775b04166f9 /hw/usb
parentee6abeb6ec08473713848ce9028110f1684853b7 (diff)
downloadqemu-02a5c4c97422b40034f31265e0f139f7846172a8.tar.gz
qdev: Drop misleading qdev_free() function
The qdev_free() function name is misleading since all the function does is unlink the device from its parent. The device is not necessarily freed. The device will be freed when its QObject refcount reaches zero. It is usual for the parent (bus) to hold the final reference but there are cases where something else holds a reference so "free" is a misleading name. Call object_unparent(obj) directly instead of having a qdev wrapper function. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
Diffstat (limited to 'hw/usb')
-rw-r--r--hw/usb/bus.c7
-rw-r--r--hw/usb/dev-storage.c2
-rw-r--r--hw/usb/host-legacy.c2
3 files changed, 6 insertions, 5 deletions
diff --git a/hw/usb/bus.c b/hw/usb/bus.c
index 72d5b92225..ca329bef29 100644
--- a/hw/usb/bus.c
+++ b/hw/usb/bus.c
@@ -356,8 +356,9 @@ void usb_port_location(USBPort *downstream, USBPort *upstream, int portnr)
void usb_unregister_port(USBBus *bus, USBPort *port)
{
- if (port->dev)
- qdev_free(&port->dev->qdev);
+ if (port->dev) {
+ object_unparent(OBJECT(port->dev));
+ }
QTAILQ_REMOVE(&bus->free, port, next);
bus->nfree--;
}
@@ -505,7 +506,7 @@ int usb_device_delete_addr(int busnr, int addr)
return -1;
dev = port->dev;
- qdev_free(&dev->qdev);
+ object_unparent(OBJECT(dev));
return 0;
}
diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
index 1d81ac2a6b..c434c5680f 100644
--- a/hw/usb/dev-storage.c
+++ b/hw/usb/dev-storage.c
@@ -703,7 +703,7 @@ static USBDevice *usb_msd_init(USBBus *bus, const char *filename)
return NULL;
}
if (qdev_prop_set_drive(&dev->qdev, "drive", dinfo->bdrv) < 0) {
- qdev_free(&dev->qdev);
+ object_unparent(OBJECT(dev));
return NULL;
}
if (qdev_init(&dev->qdev) < 0)
diff --git a/hw/usb/host-legacy.c b/hw/usb/host-legacy.c
index 3a5f705721..3cc9c4282c 100644
--- a/hw/usb/host-legacy.c
+++ b/hw/usb/host-legacy.c
@@ -132,7 +132,7 @@ USBDevice *usb_host_device_open(USBBus *bus, const char *devname)
return dev;
fail:
- qdev_free(&dev->qdev);
+ object_unparent(OBJECT(dev));
return NULL;
}