From nobody Wed May 14 19:33:20 2025 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 152267441368056.83952121089112; Mon, 2 Apr 2018 06:06:53 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1107F83F3E; Mon, 2 Apr 2018 13:06:52 +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 CF30260F9A; Mon, 2 Apr 2018 13:06:51 +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 507FE1800CA0; Mon, 2 Apr 2018 13:06:51 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w32D6PKL007645 for ; Mon, 2 Apr 2018 09:06:25 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0E8AB6046B; Mon, 2 Apr 2018 13:06:25 +0000 (UTC) Received: from unknown54ee7586bd10.attlocal.net.com (ovpn-116-52.phx2.redhat.com [10.3.116.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id C3E47600C8 for ; Mon, 2 Apr 2018 13:06:24 +0000 (UTC) From: John Ferlan To: libvir-list@redhat.com Date: Mon, 2 Apr 2018 09:06:16 -0400 Message-Id: <20180402130616.25745-6-jferlan@redhat.com> In-Reply-To: <20180402130616.25745-1-jferlan@redhat.com> References: <20180402130616.25745-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 5/5] uml: Use virDomainObjListFindBy{UUID|ID}Ref 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Mon, 02 Apr 2018 13:06:52 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" For umlDomObjFromDomainLocked and umlDomainLookupByID let's return a locked and referenced @vm object so that callers can then use the common and more consistent virDomainObjEndAPI in order to handle cleanup rather than needing to know that the returned object is locked and calling virObjectUnlock. This means for some consumers we need to relock the @dom after a virDomainObjListRemove, but before calling virDomainObjEndAPI. The LookupByName already returns the ref counted and locked object, so this will make things more consistent. Signed-off-by: John Ferlan Reviewed-by: Daniel P. Berrang=C3=A9 --- src/uml/uml_driver.c | 91 ++++++++++++++++++------------------------------= ---- 1 file changed, 32 insertions(+), 59 deletions(-) diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index b81da7cb2e..93d8a9f57c 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -171,7 +171,7 @@ umlDomObjFromDomainLocked(struct uml_driver *driver, virDomainObjPtr vm; char uuidstr[VIR_UUID_STRING_BUFLEN]; =20 - if (!(vm =3D virDomainObjListFindByUUID(driver->domains, uuid))) { + if (!(vm =3D virDomainObjListFindByUUIDRef(driver->domains, uuid))) { virUUIDFormat(uuid, uuidstr); =20 virReportError(VIR_ERR_NO_DOMAIN, @@ -773,8 +773,7 @@ static int umlProcessAutoDestroyDom(void *payload, return 0; } =20 - if (!(dom =3D virDomainObjListFindByUUID(data->driver->domains, - uuid))) { + if (!(dom =3D virDomainObjListFindByUUIDRef(data->driver->domains, uui= d))) { VIR_DEBUG("No domain object to kill"); return 0; } @@ -788,11 +787,10 @@ static int umlProcessAutoDestroyDom(void *payload, =20 if (!dom->persistent) { virDomainObjListRemove(data->driver->domains, dom); - dom =3D NULL; + virObjectLock(dom); } =20 - if (dom) - virObjectUnlock(dom); + virDomainObjEndAPI(&dom); if (event) umlDomainEventQueue(data->driver, event); virHashRemoveEntry(data->driver->autodestroy, uuidstr); @@ -1389,7 +1387,7 @@ static virDomainPtr umlDomainLookupByID(virConnectPtr= conn, virDomainPtr dom =3D NULL; =20 umlDriverLock(driver); - vm =3D virDomainObjListFindByID(driver->domains, id); + vm =3D virDomainObjListFindByIDRef(driver->domains, id); umlDriverUnlock(driver); =20 if (!vm) { @@ -1404,8 +1402,7 @@ static virDomainPtr umlDomainLookupByID(virConnectPtr= conn, dom =3D virGetDomain(conn, vm->def->name, vm->def->uuid, vm->def->id); =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return dom; } =20 @@ -1425,8 +1422,7 @@ static virDomainPtr umlDomainLookupByUUID(virConnectP= tr conn, dom =3D virGetDomain(conn, vm->def->name, vm->def->uuid, vm->def->id); =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return dom; } =20 @@ -1473,8 +1469,7 @@ static int umlDomainIsActive(virDomainPtr dom) ret =3D virDomainObjIsActive(obj); =20 cleanup: - if (obj) - virObjectUnlock(obj); + virDomainObjEndAPI(&obj); return ret; } =20 @@ -1494,8 +1489,7 @@ static int umlDomainIsPersistent(virDomainPtr dom) ret =3D obj->persistent; =20 cleanup: - if (obj) - virObjectUnlock(obj); + virDomainObjEndAPI(&obj); return ret; } =20 @@ -1514,8 +1508,7 @@ static int umlDomainIsUpdated(virDomainPtr dom) ret =3D obj->updated; =20 cleanup: - if (obj) - virObjectUnlock(obj); + virDomainObjEndAPI(&obj); return ret; } =20 @@ -1676,8 +1669,7 @@ static int umlDomainShutdownFlags(virDomainPtr dom, =20 cleanup: VIR_FREE(info); - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } =20 @@ -1711,15 +1703,13 @@ umlDomainDestroyFlags(virDomainPtr dom, VIR_DOMAIN_EVENT_STOPPED, VIR_DOMAIN_EVENT_STOPPED_DESTROYED); if (!vm->persistent) { - virDomainObjListRemove(driver->domains, - vm); - vm =3D NULL; + virDomainObjListRemove(driver->domains, vm); + virObjectLock(vm); } ret =3D 0; =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); if (event) umlDomainEventQueue(driver, event); umlDriverUnlock(driver); @@ -1748,8 +1738,7 @@ static char *umlDomainGetOSType(virDomainPtr dom) { goto cleanup; =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return type; } =20 @@ -1770,8 +1759,7 @@ umlDomainGetMaxMemory(virDomainPtr dom) ret =3D virDomainDefGetMemoryTotal(vm->def); =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } =20 @@ -1797,8 +1785,7 @@ static int umlDomainSetMaxMemory(virDomainPtr dom, un= signed long newmax) ret =3D 0; =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } =20 @@ -1830,8 +1817,7 @@ static int umlDomainSetMemory(virDomainPtr dom, unsig= ned long newmem) ret =3D 0; =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } =20 @@ -1866,8 +1852,7 @@ static int umlDomainGetInfo(virDomainPtr dom, ret =3D 0; =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } =20 @@ -1894,8 +1879,7 @@ umlDomainGetState(virDomainPtr dom, ret =3D 0; =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } =20 @@ -1921,8 +1905,7 @@ static char *umlDomainGetXMLDesc(virDomainPtr dom, virDomainDefFormatConvertXMLFlags(flags)); =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } =20 @@ -1986,8 +1969,7 @@ static int umlDomainCreateWithFlags(virDomainPtr dom,= unsigned int flags) VIR_DOMAIN_EVENT_STARTED_BOOTED); =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); if (event) umlDomainEventQueue(driver, event); umlDriverUnlock(driver); @@ -2034,8 +2016,7 @@ umlDomainDefineXMLFlags(virConnectPtr conn, const cha= r *xml, unsigned int flags) =20 if (virDomainSaveConfig(driver->configDir, driver->caps, vm->newDef ? vm->newDef : vm->def) < 0) { - virDomainObjListRemove(driver->domains, - vm); + virDomainObjListRemove(driver->domains, vm); vm =3D NULL; goto cleanup; } @@ -2085,14 +2066,13 @@ static int umlDomainUndefineFlags(virDomainPtr dom, vm->persistent =3D 0; } else { virDomainObjListRemove(driver->domains, vm); - vm =3D NULL; + virObjectLock(vm); } =20 ret =3D 0; =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); umlDriverUnlock(driver); return ret; } @@ -2198,8 +2178,7 @@ static int umlDomainAttachDevice(virDomainPtr dom, co= nst char *xml) cleanup: =20 virDomainDeviceDefFree(dev); - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); umlDriverUnlock(driver); return ret; } @@ -2306,8 +2285,7 @@ static int umlDomainDetachDevice(virDomainPtr dom, co= nst char *xml) =20 cleanup: virDomainDeviceDefFree(dev); - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); umlDriverUnlock(driver); return ret; } @@ -2348,8 +2326,7 @@ static int umlDomainGetAutostart(virDomainPtr dom, ret =3D 0; =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); umlDriverUnlock(driver); return ret; } @@ -2413,8 +2390,7 @@ static int umlDomainSetAutostart(virDomainPtr dom, cleanup: VIR_FREE(configFile); VIR_FREE(autostartLink); - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); umlDriverUnlock(driver); return ret; } @@ -2477,8 +2453,7 @@ umlDomainBlockPeek(virDomainPtr dom, =20 cleanup: VIR_FORCE_CLOSE(fd); - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } =20 @@ -2545,8 +2520,7 @@ umlDomainOpenConsole(virDomainPtr dom, =20 ret =3D 0; cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); umlDriverUnlock(driver); return ret; } @@ -2845,8 +2819,7 @@ umlDomainHasManagedSaveImage(virDomainPtr dom, unsign= ed int flags) ret =3D 0; =20 cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } =20 --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list