From nobody Thu Nov 13 12:01:31 2025 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=pass; 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=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1579796767; cv=none; d=zohomail.com; s=zohoarc; b=Q3NQemNn1DXk4thAW2642jUzn+KB5jyXyEEF34tnVJ4+dvouIDC/L4JcBgTkfEWDeYTan2fC4xOZgFShsqvOxGlycgGkTB5UAwLDfFgDEVksCn4xlcmsZVnoKr4KLzwGqKeIvtRwq3VFcMSf4So8Z78ojO0vQ5oRJVZAcuzEt+c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579796767; 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=IHfd+wKG0HObWs0T+rNYcGUQGmZU6V/Hd1C2C2od1NE=; b=ciX6e2gWhE4otM+WQLYws3KLh1wzCs0jDSj60OJRFInY2DwXt5J2WaGZ0cinLAf+OJfOcgdrXy5rvblfr3KafB7DiU5hOR9F0HfdrBV8L/uwIXjOXQrNvY3B30rHaZNeaHyrjzUc+CwAXTRtDRhx0rW0L+Q2FULxT+QPHgDaKQk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass 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 157979676755627.94554346849293; Thu, 23 Jan 2020 08:26:07 -0800 (PST) Received: from localhost ([::1]:60364 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iufIz-0002cb-Qb for importer@patchew.org; Thu, 23 Jan 2020 11:26:05 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53038) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iucuN-0001LQ-1b for qemu-devel@nongnu.org; Thu, 23 Jan 2020 08:52:32 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iucuM-0001Gz-1e for qemu-devel@nongnu.org; Thu, 23 Jan 2020 08:52:30 -0500 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:57272 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iucuL-0001Gn-UR for qemu-devel@nongnu.org; Thu, 23 Jan 2020 08:52:29 -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-29-8TqNCaWnOv2nCET-3CkjGQ-1; Thu, 23 Jan 2020 08:52:27 -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 10C4C1137840 for ; Thu, 23 Jan 2020 13:52:27 +0000 (UTC) Received: from 640k.localdomain.com (unknown [10.36.112.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0E6638575C; Thu, 23 Jan 2020 13:52:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1579787549; 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=IHfd+wKG0HObWs0T+rNYcGUQGmZU6V/Hd1C2C2od1NE=; b=JSJeB1hyZyGUkPzduos2stnILZRgmy7/0/I2UDwxZrNo0ZS6wQ3UNgPOFOMAJUVLl7lvxi MlaqM8c6shABAyxdNeVIvhBYWo3SiRNJlsWXJxWxYrqDuefryKTd6RLz8wJ605veuHCcHi jkkGIzrRcWUt1yDF9c17Ay1529LOmlo= From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 46/59] object: release all props Date: Thu, 23 Jan 2020 14:50:36 +0100 Message-Id: <1579787449-27599-47-git-send-email-pbonzini@redhat.com> In-Reply-To: <1579787449-27599-1-git-send-email-pbonzini@redhat.com> References: <1579787449-27599-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-MC-Unique: 8TqNCaWnOv2nCET-3CkjGQ-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 207.211.31.120 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: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" From: Marc-Andr=C3=A9 Lureau 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 Message-Id: <20200110153039.1379601-18-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini --- qom/object.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/qom/object.c b/qom/object.c index a3da546..66c4a5f 100644 --- a/qom/object.c +++ b/qom/object.c @@ -592,23 +592,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 1.8.3.1