From nobody Tue Feb 10 07:23:02 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1575200384; cv=none; d=zohomail.com; s=zohoarc; b=CYYCbpdSx7neySlRyoo+t64wcoMBAsHYL7zmJ+tNPepI4oyncnFOuonDRaF2YCat+zw/oNXrTEge2jLKrHvbhfS/+YaOA+6D4qtoauCLfaI7WrOXw48dHmFKQg3CUX3iCqoYQEoe0fhNCTg+KOC2Nhir+1QhADmvK9H/xB23PdU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1575200384; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=bgNueKHODW6/ZFYS8VnwDlNSxwl1I49NzP+Ivr9lqAg=; b=aESkTmCGaTN7F9GlcGUp9mEGr6SimYY/mBvQCfW5W+XmkJiNxVXeWNgdeeeYdln5t46hpeidui0euiA+x6gdaQmKy4MgkHA9CF+pHPYLOrTA4YOf5mrB64yWC525YPIAGg7yUb6+pIU6yjSot19dFuoKqwaL1yKa6pJ36KZdQwU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1575200384462667.0884138036319; Sun, 1 Dec 2019 03:39:44 -0800 (PST) Received: from localhost ([::1]:50396 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ibNZm-0000a8-VS for importer@patchew.org; Sun, 01 Dec 2019 06:39:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37981) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ibNFV-0002VQ-IJ for qemu-devel@nongnu.org; Sun, 01 Dec 2019 06:18:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ibNFR-0001AQ-Oh for qemu-devel@nongnu.org; Sun, 01 Dec 2019 06:18:43 -0500 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:35982 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ibNFP-00017O-L6 for qemu-devel@nongnu.org; Sun, 01 Dec 2019 06:18:41 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-225-7f9aBezcOs-lO-LMoZm8YQ-1; Sun, 01 Dec 2019 06:18:28 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C48DB107ACC4 for ; Sun, 1 Dec 2019 11:18:27 +0000 (UTC) Received: from localhost (unknown [10.36.112.15]) by smtp.corp.redhat.com (Postfix) with ESMTP id BC9336609E; Sun, 1 Dec 2019 11:18:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1575199111; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bgNueKHODW6/ZFYS8VnwDlNSxwl1I49NzP+Ivr9lqAg=; b=RsvpseetJ+0xS/eH3N4kE61JeqwLYZmC6FOcsgwFtaMHyw9cyk7/HjdPjS34WUE3/1RZKK pGICycIUhJvwMFUxCTfJBYaxiL1sCHaJZUm3p61hFJUQ6xvYh5Znl/nj/hvgB4gxZg5E0H F3fYGqe5flT4hG6Q8PXi9AMO8Wzwbt0= From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Subject: [PATCH 17/26] object: release all props Date: Sun, 1 Dec 2019 15:15:22 +0400 Message-Id: <20191201111531.1136947-18-marcandre.lureau@redhat.com> In-Reply-To: <20191201111531.1136947-1-marcandre.lureau@redhat.com> References: <20191201111531.1136947-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-MC-Unique: 7f9aBezcOs-lO-LMoZm8YQ-1 X-Mimecast-Spam-Score: 0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 207.211.31.81 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: pbonzini@redhat.com, berrange@redhat.com, ehabkost@redhat.com, =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Class properties may have to release resources when the object is destroyed. Let's use the existing release() callback for that, but class properties must not release ObjectProperty, as it can be shared by various instances. Signed-off-by: Marc-Andr=C3=A9 Lureau --- qom/object.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/qom/object.c b/qom/object.c index 9227dbc08b..10acf9bff9 100644 --- a/qom/object.c +++ b/qom/object.c @@ -564,23 +564,22 @@ static inline bool object_property_is_child(ObjectPro= perty *prop) =20 static void object_property_del_all(Object *obj) { + g_autoptr(GHashTable) done =3D g_hash_table_new(NULL, NULL); ObjectProperty *prop; - GHashTableIter iter; - gpointer key, value; + ObjectPropertyIterator iter; bool released; =20 do { released =3D false; - g_hash_table_iter_init(&iter, obj->properties); - while (g_hash_table_iter_next(&iter, &key, &value)) { - prop =3D value; - if (prop->release) { - prop->release(obj, prop->name, prop->opaque); - prop->release =3D NULL; - released =3D true; - break; + object_property_iter_init(&iter, obj); + while ((prop =3D object_property_iter_next(&iter)) !=3D NULL) { + if (g_hash_table_add(done, prop)) { + if (prop->release) { + prop->release(obj, prop->name, prop->opaque); + released =3D true; + break; + } } - g_hash_table_iter_remove(&iter); } } while (released); =20 --=20 2.24.0