From nobody Sun May 5 20:16:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1522326910028148.46114082451857; Thu, 29 Mar 2018 05:35:10 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id 02527C03E013; Thu, 29 Mar 2018 12:34:40 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 986B06A977; Thu, 29 Mar 2018 12:34:39 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 62785181BA04; Thu, 29 Mar 2018 12:34:39 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w2TCYLYb027557 for ; Thu, 29 Mar 2018 08:34:21 -0400 Received: by smtp.corp.redhat.com (Postfix) id EE63A60F81; Thu, 29 Mar 2018 12:34:19 +0000 (UTC) Received: from unknown54ee7586bd10.attlocal.net.com (ovpn-116-109.phx2.redhat.com [10.3.116.109]) by smtp.corp.redhat.com (Postfix) with ESMTP id AABC45CC3F for ; Thu, 29 Mar 2018 12:34:19 +0000 (UTC) From: John Ferlan To: libvir-list@redhat.com Date: Thu, 29 Mar 2018 08:34:07 -0400 Message-Id: <20180329123410.11833-2-jferlan@redhat.com> In-Reply-To: <20180329123410.11833-1-jferlan@redhat.com> References: <20180329123410.11833-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/4] conf: Fix error path logic in virDomainObjListAddLocked X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Thu, 29 Mar 2018 12:34:41 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" If the virHashAddEntry fails, then we need to "careful" about how we free the @vm. When virDomainObjNew returns there is one reference and the object is locked, so use virDomainObjEndAPI when done. Add a virObjectRef in the error path for the second virHashAddEntry call since it doesn't call virObjectRef, but virHashRemoveEntry will call virObjectUnref because virObjectFreeHashData is called when the element is removed from the hash table as set up in virDomainObjListNew. Eventually these paths should goto error and error should be changed to use EndAPI as well, but that requires more adjustments to other paths in the code to have a locked and ref counted @vm. Signed-off-by: John Ferlan --- src/conf/virdomainobjlist.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/conf/virdomainobjlist.c b/src/conf/virdomainobjlist.c index 87a742b1e..2ae8a41a1 100644 --- a/src/conf/virdomainobjlist.c +++ b/src/conf/virdomainobjlist.c @@ -296,12 +296,14 @@ virDomainObjListAddLocked(virDomainObjListPtr doms, =20 virUUIDFormat(def->uuid, uuidstr); if (virHashAddEntry(doms->objs, uuidstr, vm) < 0) { - virObjectUnref(vm); + virObjectEndAPI(&vm); return NULL; } =20 if (virHashAddEntry(doms->objsName, def->name, vm) < 0) { + virObjectRef(vm); virHashRemoveEntry(doms->objs, uuidstr); + virObjectEndAPI(&vm); return NULL; } =20 --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 20:16:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1522326897990697.0576995195386; Thu, 29 Mar 2018 05:34:57 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id 7F2FCD6F16; Thu, 29 Mar 2018 12:34:25 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2042A60921; Thu, 29 Mar 2018 12:34:24 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 6ACF4180613A; Thu, 29 Mar 2018 12:34:23 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w2TCYMor027565 for ; Thu, 29 Mar 2018 08:34:22 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2A44860F81; Thu, 29 Mar 2018 12:34:22 +0000 (UTC) Received: from unknown54ee7586bd10.attlocal.net.com (ovpn-116-109.phx2.redhat.com [10.3.116.109]) by smtp.corp.redhat.com (Postfix) with ESMTP id DF47660BEC for ; Thu, 29 Mar 2018 12:34:20 +0000 (UTC) From: John Ferlan To: libvir-list@redhat.com Date: Thu, 29 Mar 2018 08:34:08 -0400 Message-Id: <20180329123410.11833-3-jferlan@redhat.com> In-Reply-To: <20180329123410.11833-1-jferlan@redhat.com> References: <20180329123410.11833-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/4] conf: Fix error path logic in virDomainObjListLoadStatus X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Thu, 29 Mar 2018 12:34:26 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" If the virHashAddEntry fails, then we need to "careful" about how we free the @obj. When virDomainObjParseFile returns there is one reference and the object is locked, so use virDomainObjEndAPI when done. Add a virObjectRef in the error path for the second virHashAddEntry call since it doesn't call virObjectRef, but virHashRemoveEntry will call virObjectUnref because virObjectFreeHashData is called when the element is removed from the hash table as set up in virDomainObjListNew. Signed-off-by: John Ferlan --- src/conf/virdomainobjlist.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/conf/virdomainobjlist.c b/src/conf/virdomainobjlist.c index 2ae8a41a1..765f46d5a 100644 --- a/src/conf/virdomainobjlist.c +++ b/src/conf/virdomainobjlist.c @@ -536,6 +536,7 @@ virDomainObjListLoadStatus(virDomainObjListPtr doms, goto error; =20 if (virHashAddEntry(doms->objsName, obj->def->name, obj) < 0) { + virObjectRef(obj); virHashRemoveEntry(doms->objs, uuidstr); goto error; } @@ -551,7 +552,7 @@ virDomainObjListLoadStatus(virDomainObjListPtr doms, return obj; =20 error: - virObjectUnref(obj); + virDomainObjEndAPI(&obj); VIR_FREE(statusFile); return NULL; } --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 20:16:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152232688873096.66515072065022; Thu, 29 Mar 2018 05:34:48 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2A5BEC0703B0; Thu, 29 Mar 2018 12:34:44 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BF8B35DC1E; Thu, 29 Mar 2018 12:34:43 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 954E8180BAD5; Thu, 29 Mar 2018 12:34:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w2TCYNN9027575 for ; Thu, 29 Mar 2018 08:34:23 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4E6D060F81; Thu, 29 Mar 2018 12:34:23 +0000 (UTC) Received: from unknown54ee7586bd10.attlocal.net.com (ovpn-116-109.phx2.redhat.com [10.3.116.109]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0C5F45FCA5 for ; Thu, 29 Mar 2018 12:34:22 +0000 (UTC) From: John Ferlan To: libvir-list@redhat.com Date: Thu, 29 Mar 2018 08:34:09 -0400 Message-Id: <20180329123410.11833-4-jferlan@redhat.com> In-Reply-To: <20180329123410.11833-1-jferlan@redhat.com> References: <20180329123410.11833-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 3/4] conf: Introduce virDomainObjListAddObjLocked X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Thu, 29 Mar 2018 12:34:45 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Create a common helper to add an object to the locked domain objlist hash tables and use it. Signed-off-by: John Ferlan --- src/conf/virdomainobjlist.c | 64 +++++++++++++++++++++++++++--------------= ---- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/src/conf/virdomainobjlist.c b/src/conf/virdomainobjlist.c index 765f46d5a..7022abe09 100644 --- a/src/conf/virdomainobjlist.c +++ b/src/conf/virdomainobjlist.c @@ -220,6 +220,42 @@ virDomainObjPtr virDomainObjListFindByName(virDomainOb= jListPtr doms, } =20 =20 +/** + * @doms: Domain object list pointer + * @vm: Domain object to be added + * + * Upon entry @vm should have at least 1 ref and be locked. + * + * Add the @vm into the @doms->objs and @doms->objsName hash + * tables. + * + * Returns 0 on success with 2 references and locked + * -1 on failure with 1 reference and locked + */ +static int +virDomainObjListAddObjLocked(virDomainObjListPtr doms, + virDomainObjPtr vm) +{ + char uuidstr[VIR_UUID_STRING_BUFLEN]; + + virUUIDFormat(vm->def->uuid, uuidstr); + if (virHashAddEntry(doms->objs, uuidstr, vm) < 0) + return -1; + + if (virHashAddEntry(doms->objsName, vm->def->name, vm) < 0) { + virObjectRef(vm); + virHashRemoveEntry(doms->objs, uuidstr); + return -1; + } + + /* Since domain is in two hash tables, increment the + * reference counter */ + virObjectRef(vm); + + return 0; +} + + /* * virDomainObjListAddLocked: * @@ -294,22 +330,10 @@ virDomainObjListAddLocked(virDomainObjListPtr doms, goto cleanup; vm->def =3D def; =20 - virUUIDFormat(def->uuid, uuidstr); - if (virHashAddEntry(doms->objs, uuidstr, vm) < 0) { - virObjectEndAPI(&vm); + if (virDomainObjListAddObjLocked(doms, vm) < 0) { + virDomainObjEndAPI(&vm); return NULL; } - - if (virHashAddEntry(doms->objsName, def->name, vm) < 0) { - virObjectRef(vm); - virHashRemoveEntry(doms->objs, uuidstr); - virObjectEndAPI(&vm); - return NULL; - } - - /* Since domain is in two hash tables, increment the - * reference counter */ - virObjectRef(vm); } cleanup: return vm; @@ -532,19 +556,9 @@ virDomainObjListLoadStatus(virDomainObjListPtr doms, goto error; } =20 - if (virHashAddEntry(doms->objs, uuidstr, obj) < 0) + if (virDomainObjListAddObjLocked(doms, obj) < 0) goto error; =20 - if (virHashAddEntry(doms->objsName, obj->def->name, obj) < 0) { - virObjectRef(obj); - virHashRemoveEntry(doms->objs, uuidstr); - goto error; - } - - /* Since domain is in two hash tables, increment the - * reference counter */ - virObjectRef(obj); - if (notify) (*notify)(obj, 1, opaque); =20 --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 20:16:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1522326890010684.8718084303815; Thu, 29 Mar 2018 05:34:50 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 81EA47AEA5; Thu, 29 Mar 2018 12:34:46 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2E8EC5D732; Thu, 29 Mar 2018 12:34:46 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id E2A78B3490; Thu, 29 Mar 2018 12:34:45 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w2TCYOtS027589 for ; Thu, 29 Mar 2018 08:34:24 -0400 Received: by smtp.corp.redhat.com (Postfix) id A3AD360F81; Thu, 29 Mar 2018 12:34:24 +0000 (UTC) Received: from unknown54ee7586bd10.attlocal.net.com (ovpn-116-109.phx2.redhat.com [10.3.116.109]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6241560F8C for ; Thu, 29 Mar 2018 12:34:23 +0000 (UTC) From: John Ferlan To: libvir-list@redhat.com Date: Thu, 29 Mar 2018 08:34:10 -0400 Message-Id: <20180329123410.11833-5-jferlan@redhat.com> In-Reply-To: <20180329123410.11833-1-jferlan@redhat.com> References: <20180329123410.11833-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 4/4] conf: Fix virDomainObjParseFile object handling X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 29 Mar 2018 12:34:48 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" When virDomainObjParseFile runs, it returns a locked @obj with one reference. Rather than just use virObjectUnref to clean that up, use virObjectEndAPI. Signed-off-by: John Ferlan --- src/lxc/lxc_controller.c | 2 +- tests/qemuxml2xmltest.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c index 59609b0a0..507bffda0 100644 --- a/src/lxc/lxc_controller.c +++ b/src/lxc/lxc_controller.c @@ -284,7 +284,7 @@ static void virLXCControllerFree(virLXCControllerPtr ct= rl) =20 VIR_FREE(ctrl->devptmx); =20 - virObjectUnref(ctrl->vm); + virDomainObjEndAPI(&ctrl->vm); VIR_FREE(ctrl->name); =20 if (ctrl->timerShutdown !=3D -1) diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 0f560290a..ead4be873 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -96,7 +96,7 @@ testCompareStatusXMLToXMLFiles(const void *opaque) ret =3D 0; =20 cleanup: - virObjectUnref(obj); + virDomainObjEndAPI(&obj); VIR_FREE(actual); return ret; } --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list