From nobody Tue Feb 10 10:20:08 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=1578670652; cv=none; d=zohomail.com; s=zohoarc; b=eZb46snHN6mLAq5Dg4ZhJ4oi8KUof8d64CZvtmGD4kIv2xLeL5Q0D8A6XJeMEOVEGnXthDfWqYLJNK+SPyYHMoks1PKi1Nf/ZtkzqcmqX+dZrcS6yuWxKDygJvr8yDxJZePSOU2bRv2DKtF9yntZ4p629Y7vQQVVBBlmzLMsdtU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1578670652; 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=nwpk7VZAEQIMAD7TtXuj2pmlGsNRAk6j7Nvy1roySqc=; b=kyj/Eoxz0O5grm5WKAXYLR0Nrr25b+uPNBl8//DIKvJZGAos6ZbFBtcsTJOQkt0k1xjRwBCB5J0WKxyHOz4FVF53pZjkyXCKoJv6rRixKEIAWdnzXdO5n256rbs8lV6AxK6Zgq+K7DKYcjjATu9CdJFO/3pcnEtpu4+YcOqQfo8= 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 1578670652861146.8569696797008; Fri, 10 Jan 2020 07:37:32 -0800 (PST) Received: from localhost ([::1]:48114 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ipwLq-00059M-C5 for importer@patchew.org; Fri, 10 Jan 2020 10:37:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:60378) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ipwIn-0001HG-PD for qemu-devel@nongnu.org; Fri, 10 Jan 2020 10:34:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ipwIh-0004XV-6B for qemu-devel@nongnu.org; Fri, 10 Jan 2020 10:34:18 -0500 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:59529 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 1ipwIh-0004RT-1W for qemu-devel@nongnu.org; Fri, 10 Jan 2020 10:34:15 -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-378-BNlCamiwMWGsMpc4XlUqRw-1; Fri, 10 Jan 2020 10:34:12 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id A20F41005502 for ; Fri, 10 Jan 2020 15:34:09 +0000 (UTC) Received: from localhost (ovpn-112-59.ams2.redhat.com [10.36.112.59]) by smtp.corp.redhat.com (Postfix) with ESMTP id 54CE678E77; Fri, 10 Jan 2020 15:34:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1578670453; 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=nwpk7VZAEQIMAD7TtXuj2pmlGsNRAk6j7Nvy1roySqc=; b=VTgXvOPsO2/2nCqW3B14Qq9PKz49tLdnUb0JOMjnVmn8dP8vVfOWtyfLXFZRwH49ZNwug2 yT1gli2IOSyZZeKWF5YUQxxSyMV5Co4pjR+7t6hszLYGF5yMKgqm20VvSzSSrt6u3lwPSj z3DRLcvFzekAff8EP4PsafJ4E6ekI3Y= From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Subject: [PATCH 17/26] object: release all props Date: Fri, 10 Jan 2020 19:30:30 +0400 Message-Id: <20200110153039.1379601-18-marcandre.lureau@redhat.com> In-Reply-To: <20200110153039.1379601-1-marcandre.lureau@redhat.com> References: <20200110153039.1379601-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-MC-Unique: BNlCamiwMWGsMpc4XlUqRw-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: 205.139.110.61 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: Paolo Bonzini , "Daniel P . Berrange" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Eduardo Habkost , =?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 04f2991716..3924678ec3 100644 --- a/qom/object.c +++ b/qom/object.c @@ -583,23 +583,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.25.0.rc1.20.g2443f3f80d.dirty