mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
qdev: move bus removal to object_unparent
Add an ObjectClass method that is done at object_unparent time. It should remove any backlinks to the object in the composition tree, so that object_delete will be able to drop the last reference and free the object. Use it for qdev buses. Reviewed-by: Andreas Färber <afaerber@suse.de> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
764b63125a
commit
667d22d1ae
3 changed files with 27 additions and 3 deletions
16
hw/qdev.c
16
hw/qdev.c
|
@ -705,9 +705,6 @@ static void device_finalize(Object *obj)
|
|||
qemu_opts_del(dev->opts);
|
||||
}
|
||||
}
|
||||
if (dev->parent_bus) {
|
||||
bus_remove_child(dev->parent_bus, dev);
|
||||
}
|
||||
}
|
||||
|
||||
static void device_class_base_init(ObjectClass *class, void *data)
|
||||
|
@ -720,6 +717,18 @@ static void device_class_base_init(ObjectClass *class, void *data)
|
|||
klass->props = NULL;
|
||||
}
|
||||
|
||||
static void qdev_remove_from_bus(Object *obj)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
|
||||
bus_remove_child(dev->parent_bus, dev);
|
||||
}
|
||||
|
||||
static void device_class_init(ObjectClass *class, void *data)
|
||||
{
|
||||
class->unparent = qdev_remove_from_bus;
|
||||
}
|
||||
|
||||
void device_reset(DeviceState *dev)
|
||||
{
|
||||
DeviceClass *klass = DEVICE_GET_CLASS(dev);
|
||||
|
@ -747,6 +756,7 @@ static TypeInfo device_type_info = {
|
|||
.instance_init = device_initfn,
|
||||
.instance_finalize = device_finalize,
|
||||
.class_base_init = device_class_base_init,
|
||||
.class_init = device_class_init,
|
||||
.abstract = true,
|
||||
.class_size = sizeof(DeviceClass),
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue