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:
Paolo Bonzini 2013-01-25 14:12:32 +01:00 committed by Anthony Liguori
parent 6c232d2ffb
commit 9d127820eb

View File

@ -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)),