From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:54754) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tbov8-0004M6-GE for qemu-devel@nongnu.org; Fri, 23 Nov 2012 03:47:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Tbov2-0002lY-OY for qemu-devel@nongnu.org; Fri, 23 Nov 2012 03:47:34 -0500 Received: from mail-we0-f173.google.com ([74.125.82.173]:36785) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tbov2-0002lP-IB for qemu-devel@nongnu.org; Fri, 23 Nov 2012 03:47:28 -0500 Received: by mail-we0-f173.google.com with SMTP id z2so1164302wey.4 for ; Fri, 23 Nov 2012 00:47:27 -0800 (PST) Sender: Paolo Bonzini From: Paolo Bonzini Date: Fri, 23 Nov 2012 09:47:15 +0100 Message-Id: <1353660436-8897-5-git-send-email-pbonzini@redhat.com> In-Reply-To: <1353660436-8897-1-git-send-email-pbonzini@redhat.com> References: <1353660436-8897-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 1.3 4/5] qdev: simplify (de)allocation of buses List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, aliguori@us.ibm.com, Liu Ping Fan All conditional deallocation can now be done with object_delete. Remove the @qom_allocated and @glib_allocated fields; replace the latter with a direct assignment of the @free function pointer. Signed-off-by: Paolo Bonzini --- hw/pci.c | 2 +- hw/qdev-core.h | 5 ----- hw/qdev.c | 10 +--------- hw/sysbus.c | 2 +- 4 files changed, 3 insertions(+), 16 deletions(-) diff --git a/hw/pci.c b/hw/pci.c index 9841e39..97a0cd7 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -301,9 +301,9 @@ PCIBus *pci_bus_new(DeviceState *parent, const char *name, PCIBus *bus; bus = g_malloc0(sizeof(*bus)); - bus->qbus.glib_allocated = true; pci_bus_new_inplace(bus, parent, name, address_space_mem, address_space_io, devfn_min); + OBJECT(bus)->free = g_free; return bus; } diff --git a/hw/qdev-core.h b/hw/qdev-core.h index fce9e22..fff7f0f 100644 --- a/hw/qdev-core.h +++ b/hw/qdev-core.h @@ -106,17 +106,12 @@ typedef struct BusChild { /** * BusState: - * @qom_allocated: Indicates whether the object was allocated by QOM. - * @glib_allocated: Indicates whether the object was initialized in-place - * yet is expected to be freed with g_free(). */ struct BusState { Object obj; DeviceState *parent; const char *name; int allow_hotplug; - bool qom_allocated; - bool glib_allocated; int max_index; QTAILQ_HEAD(ChildrenHead, BusChild) children; QLIST_ENTRY(BusState) sibling; diff --git a/hw/qdev.c b/hw/qdev.c index f43717b..788b4da 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -454,7 +454,6 @@ BusState *qbus_create(const char *typename, DeviceState *parent, const char *nam BusState *bus; bus = BUS(object_new(typename)); - bus->qom_allocated = true; bus->parent = parent; bus->name = name ? g_strdup(name) : NULL; @@ -465,14 +464,7 @@ BusState *qbus_create(const char *typename, DeviceState *parent, const char *nam void qbus_free(BusState *bus) { - if (bus->qom_allocated) { - object_delete(OBJECT(bus)); - } else { - object_finalize(OBJECT(bus)); - if (bus->glib_allocated) { - g_free(bus); - } - } + object_delete(OBJECT(bus)); } static char *bus_get_fw_dev_path(BusState *bus, DeviceState *dev) diff --git a/hw/sysbus.c b/hw/sysbus.c index 4969f06..ef8ffb6 100644 --- a/hw/sysbus.c +++ b/hw/sysbus.c @@ -274,7 +274,7 @@ static void main_system_bus_create(void) main_system_bus = g_malloc0(system_bus_info.instance_size); qbus_create_inplace(main_system_bus, TYPE_SYSTEM_BUS, NULL, "main-system-bus"); - main_system_bus->glib_allocated = true; + OBJECT(main_system_bus)->free = g_free; object_property_add_child(container_get(qdev_get_machine(), "/unattached"), "sysbus", OBJECT(main_system_bus), NULL); -- 1.8.0