From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35072) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W0LX5-0006Hu-Do for qemu-devel@nongnu.org; Mon, 06 Jan 2014 20:32:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W0LWz-0008DE-E6 for qemu-devel@nongnu.org; Mon, 06 Jan 2014 20:32:39 -0500 Received: from lgeamrelo02.lge.com ([156.147.1.126]:43438) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W0LWz-0008D0-3Z for qemu-devel@nongnu.org; Mon, 06 Jan 2014 20:32:33 -0500 From: Namhyung Kim Date: Tue, 7 Jan 2014 10:32:29 +0900 Message-Id: <1389058349-13367-1-git-send-email-namhyung@gmail.com> Subject: [Qemu-devel] [PATCH] qom: Introduce object_property_remove() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org As the object_property_del(), object_property_del_child() and object_property_del_all() do similar job, factor out the common code to a new object_property_remove(). It'll also remove unnecessary call to object_property_find() in case of object_property_del_child() so that we can get rid of the unused errp argument too. Signed-off-by: Namhyung Kim --- qom/object.c | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/qom/object.c b/qom/object.c index fc19cf6..a38cf72 100644 --- a/qom/object.c +++ b/qom/object.c @@ -347,30 +347,35 @@ static inline bool object_property_is_link(ObjectProperty *prop) return strstart(prop->type, "link<", NULL); } +static void object_property_remove(Object *obj, ObjectProperty *prop) +{ + QTAILQ_REMOVE(&obj->properties, prop, node); + + if (prop->release) { + prop->release(obj, prop->name, prop->opaque); + } + + g_free(prop->name); + g_free(prop->type); + g_free(prop); +} + static void object_property_del_all(Object *obj) { while (!QTAILQ_EMPTY(&obj->properties)) { ObjectProperty *prop = QTAILQ_FIRST(&obj->properties); - QTAILQ_REMOVE(&obj->properties, prop, node); - - if (prop->release) { - prop->release(obj, prop->name, prop->opaque); - } - - g_free(prop->name); - g_free(prop->type); - g_free(prop); + object_property_remove(obj, prop); } } -static void object_property_del_child(Object *obj, Object *child, Error **errp) +static void object_property_del_child(Object *obj, Object *child) { ObjectProperty *prop; QTAILQ_FOREACH(prop, &obj->properties, node) { if (object_property_is_child(prop) && prop->opaque == child) { - object_property_del(obj, prop->name, errp); + object_property_remove(obj, prop); break; } } @@ -387,7 +392,7 @@ void object_unparent(Object *obj) (obj->class->unparent)(obj); } if (obj->parent) { - object_property_del_child(obj->parent, obj, NULL); + object_property_del_child(obj->parent, obj); } object_unref(obj); } @@ -763,15 +768,7 @@ void object_property_del(Object *obj, const char *name, Error **errp) return; } - if (prop->release) { - prop->release(obj, name, prop->opaque); - } - - QTAILQ_REMOVE(&obj->properties, prop, node); - - g_free(prop->name); - g_free(prop->type); - g_free(prop); + object_property_remove(obj, prop); } void object_property_get(Object *obj, Visitor *v, const char *name, -- 1.7.11.7