qdev: add reference count to a device for the BusChild
Each device has a reference through the BusChild. This reference was not accounted for, add it now. 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
6c232d2ffb
commit
9d127820eb
@ -64,7 +64,10 @@ static void bus_remove_child(BusState *bus, DeviceState *child)
|
|||||||
|
|
||||||
snprintf(name, sizeof(name), "child[%d]", kid->index);
|
snprintf(name, sizeof(name), "child[%d]", kid->index);
|
||||||
QTAILQ_REMOVE(&bus->children, kid, sibling);
|
QTAILQ_REMOVE(&bus->children, kid, sibling);
|
||||||
|
|
||||||
|
/* This gives back ownership of kid->child back to us. */
|
||||||
object_property_del(OBJECT(bus), name, NULL);
|
object_property_del(OBJECT(bus), name, NULL);
|
||||||
|
object_unref(OBJECT(kid->child));
|
||||||
g_free(kid);
|
g_free(kid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -82,9 +85,11 @@ static void bus_add_child(BusState *bus, DeviceState *child)
|
|||||||
|
|
||||||
kid->index = bus->max_index++;
|
kid->index = bus->max_index++;
|
||||||
kid->child = child;
|
kid->child = child;
|
||||||
|
object_ref(OBJECT(kid->child));
|
||||||
|
|
||||||
QTAILQ_INSERT_HEAD(&bus->children, kid, sibling);
|
QTAILQ_INSERT_HEAD(&bus->children, kid, sibling);
|
||||||
|
|
||||||
|
/* This transfers ownership of kid->child to the property. */
|
||||||
snprintf(name, sizeof(name), "child[%d]", kid->index);
|
snprintf(name, sizeof(name), "child[%d]", kid->index);
|
||||||
object_property_add_link(OBJECT(bus), name,
|
object_property_add_link(OBJECT(bus), name,
|
||||||
object_get_typename(OBJECT(child)),
|
object_get_typename(OBJECT(child)),
|
||||||
|
Loading…
Reference in New Issue
Block a user