From nobody Sat May 4 06:27:53 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 1518433155188763.0569531553036; Mon, 12 Feb 2018 02:59:15 -0800 (PST) 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 D80D4C05B015; Mon, 12 Feb 2018 10:59:13 +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 AAA9260BF7; Mon, 12 Feb 2018 10:59:13 +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 4DDDC18033DD; Mon, 12 Feb 2018 10:59:13 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w1CAr2bN025654 for ; Mon, 12 Feb 2018 05:53:02 -0500 Received: by smtp.corp.redhat.com (Postfix) id 058D41243EC2; Mon, 12 Feb 2018 10:53:02 +0000 (UTC) Received: from localhost.localdomain (ovpn-204-25.brq.redhat.com [10.40.204.25]) by smtp.corp.redhat.com (Postfix) with ESMTP id 699AF1227923; Mon, 12 Feb 2018 10:53:01 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Mon, 12 Feb 2018 11:52:48 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/6] virObject: use virReportSystemError if applicable 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]); Mon, 12 Feb 2018 10:59:14 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" When initializing a mutex (either regular or RW) the virMutexInit() and virRWLockInit() functions set errno and return -1. It's a pity we don't use virReportSystemError() in that case rather plain virReportError(). Signed-off-by: Michal Privoznik --- src/util/virobject.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/util/virobject.c b/src/util/virobject.c index 1723df6b2..b2fc63aec 100644 --- a/src/util/virobject.c +++ b/src/util/virobject.c @@ -273,8 +273,8 @@ virObjectLockableNew(virClassPtr klass) return NULL; =20 if (virMutexInit(&obj->lock) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to initialize mutex")); + virReportSystemError(errno, "%s", + _("Unable to initialize mutex")); virObjectUnref(obj); return NULL; } @@ -299,8 +299,8 @@ virObjectRWLockableNew(virClassPtr klass) return NULL; =20 if (virRWLockInit(&obj->lock) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to initialize RW lock")); + virReportSystemError(errno, "%s", + _("Unable to initialize RW lock")); virObjectUnref(obj); return NULL; } --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 4 06:27:53 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 151843297486014.839987981715467; Mon, 12 Feb 2018 02:56:14 -0800 (PST) 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 794A361470; Mon, 12 Feb 2018 10:56:13 +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 42A2360C8D; Mon, 12 Feb 2018 10:56:13 +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 CEFDE18033E5; Mon, 12 Feb 2018 10:56:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w1CAr2lT025666 for ; Mon, 12 Feb 2018 05:53:03 -0500 Received: by smtp.corp.redhat.com (Postfix) id DA311124BB36; Mon, 12 Feb 2018 10:53:02 +0000 (UTC) Received: from localhost.localdomain (ovpn-204-25.brq.redhat.com [10.40.204.25]) by smtp.corp.redhat.com (Postfix) with ESMTP id 49EFA1251BDC; Mon, 12 Feb 2018 10:53:02 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Mon, 12 Feb 2018 11:52:49 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/6] virObject: Introduce virObjectRecursiveLockableNew 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.39]); Mon, 12 Feb 2018 10:56:14 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Sometimes we need the lock in virObjectLockable to be recursive. Because of the nature of pthreads we don't need a special class for that - the pthread_* APIs don't distinguish between normal and recursive locks. Based-on-work-of: John Ferlan Signed-off-by: Michal Privoznik --- src/libvirt_private.syms | 1 + src/util/virobject.c | 22 +++++++++++++++++++--- src/util/virobject.h | 4 ++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 3b14d7d15..fcf378105 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2417,6 +2417,7 @@ virObjectListFreeCount; virObjectLock; virObjectLockableNew; virObjectNew; +virObjectRecursiveLockableNew; virObjectRef; virObjectRWLockableNew; virObjectRWLockRead; diff --git a/src/util/virobject.c b/src/util/virobject.c index b2fc63aec..1d82e826b 100644 --- a/src/util/virobject.c +++ b/src/util/virobject.c @@ -257,8 +257,9 @@ virObjectNew(virClassPtr klass) } =20 =20 -void * -virObjectLockableNew(virClassPtr klass) +static void * +virObjectLockableNewInternal(virClassPtr klass, + bool recursive) { virObjectLockablePtr obj; =20 @@ -272,7 +273,8 @@ virObjectLockableNew(virClassPtr klass) if (!(obj =3D virObjectNew(klass))) return NULL; =20 - if (virMutexInit(&obj->lock) < 0) { + if ((!recursive && virMutexInit(&obj->lock) < 0) || + (recursive && virMutexInitRecursive(&obj->lock) < 0)) { virReportSystemError(errno, "%s", _("Unable to initialize mutex")); virObjectUnref(obj); @@ -283,6 +285,20 @@ virObjectLockableNew(virClassPtr klass) } =20 =20 +void * +virObjectLockableNew(virClassPtr klass) +{ + return virObjectLockableNewInternal(klass, false); +} + + +void * +virObjectRecursiveLockableNew(virClassPtr klass) +{ + return virObjectLockableNewInternal(klass, true); +} + + void * virObjectRWLockableNew(virClassPtr klass) { diff --git a/src/util/virobject.h b/src/util/virobject.h index ac6cf22f9..367d505ae 100644 --- a/src/util/virobject.h +++ b/src/util/virobject.h @@ -116,6 +116,10 @@ void * virObjectLockableNew(virClassPtr klass) ATTRIBUTE_NONNULL(1); =20 +void * +virObjectRecursiveLockableNew(virClassPtr klass) + ATTRIBUTE_NONNULL(1); + void * virObjectRWLockableNew(virClassPtr klass) ATTRIBUTE_NONNULL(1); --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 4 06:27:53 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 1518433172462445.5539723180269; Mon, 12 Feb 2018 02:59:32 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2887249003; Mon, 12 Feb 2018 10:59:31 +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 F2E4B5C266; Mon, 12 Feb 2018 10:59:30 +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 B721918033E6; Mon, 12 Feb 2018 10:59:30 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w1CAr4PU025675 for ; Mon, 12 Feb 2018 05:53:04 -0500 Received: by smtp.corp.redhat.com (Postfix) id E0211124BB36; Mon, 12 Feb 2018 10:53:03 +0000 (UTC) Received: from localhost.localdomain (ovpn-204-25.brq.redhat.com [10.40.204.25]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2CBBF1227923; Mon, 12 Feb 2018 10:53:03 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Mon, 12 Feb 2018 11:52:50 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 3/6] virNWFilterObj: Turn into virObjectLockable 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Mon, 12 Feb 2018 10:59:31 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The virNWFilterObj requires recursive locks, otherwise it is regular virObject. So when creating the object we must call virObjectRecursiveLockableNew(). Other than that, this is pure replacement of virNWFilterObj*() APIs with thei virObject*() counterparts. Based-on-work-of: John Ferlan Signed-off-by: Michal Privoznik --- src/conf/virnwfilterobj.c | 121 ++++++++++++++++-------------= ---- src/conf/virnwfilterobj.h | 6 -- src/libvirt_private.syms | 2 - src/nwfilter/nwfilter_driver.c | 10 +-- src/nwfilter/nwfilter_gentech_driver.c | 10 +-- 5 files changed, 67 insertions(+), 82 deletions(-) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index 87d7e7270..a472ff531 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -34,7 +34,7 @@ VIR_LOG_INIT("conf.virnwfilterobj"); =20 struct _virNWFilterObj { - virMutex lock; + virObjectLockable parent; =20 bool wantRemoved; =20 @@ -42,32 +42,54 @@ struct _virNWFilterObj { virNWFilterDefPtr newDef; }; =20 +static virClassPtr virNWFilterObjClass; +static void virNWFilterObjDispose(void *obj); + struct _virNWFilterObjList { size_t count; virNWFilterObjPtr *objs; }; =20 +static int virNWFilterObjOnceInit(void) +{ + if (!(virNWFilterObjClass =3D virClassNew(virClassForObjectLockable(), + "virNWFilterObj", + sizeof(virNWFilterObj), + virNWFilterObjDispose))) + return -1; + + return 0; +} + +VIR_ONCE_GLOBAL_INIT(virNWFilterObj) + =20 static virNWFilterObjPtr virNWFilterObjNew(void) { virNWFilterObjPtr obj; =20 - if (VIR_ALLOC(obj) < 0) + if (virNWFilterObjInitialize() < 0) return NULL; =20 - if (virMutexInitRecursive(&obj->lock) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("cannot initialize mutex")); - VIR_FREE(obj); + if (!(obj =3D virObjectRecursiveLockableNew(virNWFilterObjClass))) return NULL; - } =20 - virNWFilterObjLock(obj); + virObjectLock(obj); return obj; } =20 =20 +static void +virNWFilterObjDispose(void *opaque) +{ + virNWFilterObjPtr obj =3D opaque; + + virNWFilterDefFree(obj->def); + virNWFilterDefFree(obj->newDef); +} + + virNWFilterDefPtr virNWFilterObjGetDef(virNWFilterObjPtr obj) { @@ -89,27 +111,12 @@ virNWFilterObjWantRemoved(virNWFilterObjPtr obj) } =20 =20 -static void -virNWFilterObjFree(virNWFilterObjPtr obj) -{ - if (!obj) - return; - - virNWFilterDefFree(obj->def); - virNWFilterDefFree(obj->newDef); - - virMutexDestroy(&obj->lock); - - VIR_FREE(obj); -} - - void virNWFilterObjListFree(virNWFilterObjListPtr nwfilters) { size_t i; for (i =3D 0; i < nwfilters->count; i++) - virNWFilterObjFree(nwfilters->objs[i]); + virObjectUnref(nwfilters->objs[i]); VIR_FREE(nwfilters->objs); VIR_FREE(nwfilters); } @@ -132,18 +139,18 @@ virNWFilterObjListRemove(virNWFilterObjListPtr nwfilt= ers, { size_t i; =20 - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); =20 for (i =3D 0; i < nwfilters->count; i++) { - virNWFilterObjLock(nwfilters->objs[i]); + virObjectLock(nwfilters->objs[i]); if (nwfilters->objs[i] =3D=3D obj) { - virNWFilterObjUnlock(nwfilters->objs[i]); - virNWFilterObjFree(nwfilters->objs[i]); + virObjectUnlock(nwfilters->objs[i]); + virObjectUnref(nwfilters->objs[i]); =20 VIR_DELETE_ELEMENT(nwfilters->objs, i, nwfilters->count); break; } - virNWFilterObjUnlock(nwfilters->objs[i]); + virObjectUnlock(nwfilters->objs[i]); } } =20 @@ -158,11 +165,11 @@ virNWFilterObjListFindByUUID(virNWFilterObjListPtr nw= filters, =20 for (i =3D 0; i < nwfilters->count; i++) { obj =3D nwfilters->objs[i]; - virNWFilterObjLock(obj); + virObjectLock(obj); def =3D obj->def; if (!memcmp(def->uuid, uuid, VIR_UUID_BUFLEN)) return obj; - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); } =20 return NULL; @@ -179,11 +186,11 @@ virNWFilterObjListFindByName(virNWFilterObjListPtr nw= filters, =20 for (i =3D 0; i < nwfilters->count; i++) { obj =3D nwfilters->objs[i]; - virNWFilterObjLock(obj); + virObjectLock(obj); def =3D obj->def; if (STREQ_NULLABLE(def->name, name)) return obj; - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); } =20 return NULL; @@ -205,7 +212,7 @@ virNWFilterObjListFindInstantiateFilter(virNWFilterObjL= istPtr nwfilters, if (virNWFilterObjWantRemoved(obj)) { virReportError(VIR_ERR_NO_NWFILTER, _("Filter '%s' is in use."), filtername); - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); return NULL; } =20 @@ -240,7 +247,7 @@ _virNWFilterObjListDefLoopDetect(virNWFilterObjListPtr = nwfilters, if (obj) { rc =3D _virNWFilterObjListDefLoopDetect(nwfilters, obj->de= f, filtername); - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); if (rc < 0) break; } @@ -322,10 +329,10 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwf= ilters, _("filter with same UUID but different name " "('%s') already exists"), objdef->name); - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); return NULL; } - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); } else { if ((obj =3D virNWFilterObjListFindByName(nwfilters, def->name))) { char uuidstr[VIR_UUID_STRING_BUFLEN]; @@ -335,7 +342,7 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, virReportError(VIR_ERR_OPERATION_FAILED, _("filter '%s' already exists with uuid %s"), def->name, uuidstr); - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); return NULL; } } @@ -360,7 +367,7 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, /* trigger the update on VMs referencing the filter */ if (virNWFilterTriggerVMFilterRebuild() < 0) { obj->newDef =3D NULL; - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); return NULL; } =20 @@ -375,8 +382,8 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, =20 if (VIR_APPEND_ELEMENT_COPY(nwfilters->objs, nwfilters->count, obj) < 0) { - virNWFilterObjUnlock(obj); - virNWFilterObjFree(obj); + virObjectUnlock(obj); + virObjectUnref(obj); return NULL; } obj->def =3D def; @@ -395,10 +402,10 @@ virNWFilterObjListNumOfNWFilters(virNWFilterObjListPt= r nwfilters, =20 for (i =3D 0; i < nwfilters->count; i++) { virNWFilterObjPtr obj =3D nwfilters->objs[i]; - virNWFilterObjLock(obj); + virObjectLock(obj); if (!filter || filter(conn, obj->def)) nfilters++; - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); } =20 return nfilters; @@ -418,16 +425,16 @@ virNWFilterObjListGetNames(virNWFilterObjListPtr nwfi= lters, =20 for (i =3D 0; i < nwfilters->count && nnames < maxnames; i++) { virNWFilterObjPtr obj =3D nwfilters->objs[i]; - virNWFilterObjLock(obj); + virObjectLock(obj); def =3D obj->def; if (!filter || filter(conn, def)) { if (VIR_STRDUP(names[nnames], def->name) < 0) { - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); goto failure; } nnames++; } - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); } =20 return nnames; @@ -464,16 +471,16 @@ virNWFilterObjListExport(virConnectPtr conn, =20 for (i =3D 0; i < nwfilters->count; i++) { obj =3D nwfilters->objs[i]; - virNWFilterObjLock(obj); + virObjectLock(obj); def =3D obj->def; if (!filter || filter(conn, def)) { if (!(nwfilter =3D virGetNWFilter(conn, def->name, def->uuid))= ) { - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); goto cleanup; } tmp_filters[nfilters++] =3D nwfilter; } - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); } =20 *filters =3D tmp_filters; @@ -552,23 +559,9 @@ virNWFilterObjListLoadAllConfigs(virNWFilterObjListPtr= nwfilters, =20 obj =3D virNWFilterObjListLoadConfig(nwfilters, configDir, entry->= d_name); if (obj) - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); } =20 VIR_DIR_CLOSE(dir); return ret; } - - -void -virNWFilterObjLock(virNWFilterObjPtr obj) -{ - virMutexLock(&obj->lock); -} - - -void -virNWFilterObjUnlock(virNWFilterObjPtr obj) -{ - virMutexUnlock(&obj->lock); -} diff --git a/src/conf/virnwfilterobj.h b/src/conf/virnwfilterobj.h index 8e79518ed..9faba264a 100644 --- a/src/conf/virnwfilterobj.h +++ b/src/conf/virnwfilterobj.h @@ -105,10 +105,4 @@ int virNWFilterObjListLoadAllConfigs(virNWFilterObjListPtr nwfilters, const char *configDir); =20 -void -virNWFilterObjLock(virNWFilterObjPtr obj); - -void -virNWFilterObjUnlock(virNWFilterObjPtr obj); - #endif /* VIRNWFILTEROBJ_H */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index fcf378105..67e3ade0f 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1052,9 +1052,7 @@ virNWFilterObjListLoadAllConfigs; virNWFilterObjListNew; virNWFilterObjListNumOfNWFilters; virNWFilterObjListRemove; -virNWFilterObjLock; virNWFilterObjTestUnassignDef; -virNWFilterObjUnlock; virNWFilterObjWantRemoved; =20 =20 diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 717bce269..ffd603d70 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -466,7 +466,7 @@ nwfilterLookupByUUID(virConnectPtr conn, nwfilter =3D virGetNWFilter(conn, def->name, def->uuid); =20 cleanup: - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); return nwfilter; } =20 @@ -496,7 +496,7 @@ nwfilterLookupByName(virConnectPtr conn, nwfilter =3D virGetNWFilter(conn, def->name, def->uuid); =20 cleanup: - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); return nwfilter; } =20 @@ -591,7 +591,7 @@ nwfilterDefineXML(virConnectPtr conn, cleanup: virNWFilterDefFree(def); if (obj) - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); =20 virNWFilterCallbackDriversUnlock(); virNWFilterUnlockFilterUpdates(); @@ -634,7 +634,7 @@ nwfilterUndefine(virNWFilterPtr nwfilter) =20 cleanup: if (obj) - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); =20 virNWFilterCallbackDriversUnlock(); virNWFilterUnlockFilterUpdates(); @@ -667,7 +667,7 @@ nwfilterGetXMLDesc(virNWFilterPtr nwfilter, ret =3D virNWFilterDefFormat(def); =20 cleanup: - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); return ret; } =20 diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 840d419bb..106364c67 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -316,7 +316,7 @@ virNWFilterInstReset(virNWFilterInstPtr inst) size_t i; =20 for (i =3D 0; i < inst->nfilters; i++) - virNWFilterObjUnlock(inst->filters[i]); + virObjectUnlock(inst->filters[i]); VIR_FREE(inst->filters); inst->nfilters =3D 0; =20 @@ -427,7 +427,7 @@ virNWFilterIncludeDefToRuleInst(virNWFilterDriverStateP= tr driver, virNWFilterInstReset(inst); virNWFilterHashTableFree(tmpvars); if (obj) - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); return ret; } =20 @@ -541,7 +541,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr fi= lter, =20 /* create a temporary hashmap for depth-first tree traversal */ if (!(tmpvars =3D virNWFilterCreateVarsFrom(inc->params, vars)= )) { - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); return -1; } =20 @@ -565,7 +565,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr fi= lter, =20 virNWFilterHashTableFree(tmpvars); =20 - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); if (rc < 0) return -1; } @@ -839,7 +839,7 @@ virNWFilterInstantiateFilterUpdate(virNWFilterDriverSta= tePtr driver, virNWFilterHashTableFree(vars1); =20 err_exit: - virNWFilterObjUnlock(obj); + virObjectUnlock(obj); =20 VIR_FREE(str_ipaddr); VIR_FREE(str_macaddr); --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 4 06:27:53 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 1518433159145214.0800648718589; Mon, 12 Feb 2018 02:59:19 -0800 (PST) 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 E716A78540; Mon, 12 Feb 2018 10:59:17 +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 BB62460BF7; Mon, 12 Feb 2018 10:59:17 +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 82FC84A46C; Mon, 12 Feb 2018 10:59:17 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w1CAr4JC025683 for ; Mon, 12 Feb 2018 05:53:04 -0500 Received: by smtp.corp.redhat.com (Postfix) id C11B6124BB36; Mon, 12 Feb 2018 10:53:04 +0000 (UTC) Received: from localhost.localdomain (ovpn-204-25.brq.redhat.com [10.40.204.25]) by smtp.corp.redhat.com (Postfix) with ESMTP id 309C41227923; Mon, 12 Feb 2018 10:53:04 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Mon, 12 Feb 2018 11:52:51 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 4/6] conf: Introduce and use virNWFilterObjEndAPI 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.28]); Mon, 12 Feb 2018 10:59:18 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Have every API that is getting a virNWFilterObj from virNWFilterObjList grab a reference and at the same time wrap Unlock() + Unref() calls into virNWFilterObjEndAPI(). Based-on-work-of: John Ferlan Signed-off-by: Michal Privoznik --- src/conf/virnwfilterobj.c | 38 +++++++++++++++++++++---------= ---- src/conf/virnwfilterobj.h | 3 +++ src/libvirt_private.syms | 1 + src/nwfilter/nwfilter_driver.c | 14 +++++-------- src/nwfilter/nwfilter_gentech_driver.c | 11 +++++----- 5 files changed, 38 insertions(+), 29 deletions(-) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index a472ff531..6a54628b6 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -90,6 +90,18 @@ virNWFilterObjDispose(void *opaque) } =20 =20 +void +virNWFilterObjEndAPI(virNWFilterObjPtr *obj) +{ + if (!*obj) + return; + + virObjectUnlock(*obj); + virObjectUnref(*obj); + *obj =3D NULL; +} + + virNWFilterDefPtr virNWFilterObjGetDef(virNWFilterObjPtr obj) { @@ -144,8 +156,7 @@ virNWFilterObjListRemove(virNWFilterObjListPtr nwfilter= s, for (i =3D 0; i < nwfilters->count; i++) { virObjectLock(nwfilters->objs[i]); if (nwfilters->objs[i] =3D=3D obj) { - virObjectUnlock(nwfilters->objs[i]); - virObjectUnref(nwfilters->objs[i]); + virNWFilterObjEndAPI(&nwfilters->objs[i]); =20 VIR_DELETE_ELEMENT(nwfilters->objs, i, nwfilters->count); break; @@ -168,7 +179,7 @@ virNWFilterObjListFindByUUID(virNWFilterObjListPtr nwfi= lters, virObjectLock(obj); def =3D obj->def; if (!memcmp(def->uuid, uuid, VIR_UUID_BUFLEN)) - return obj; + return virObjectRef(obj); virObjectUnlock(obj); } =20 @@ -189,7 +200,7 @@ virNWFilterObjListFindByName(virNWFilterObjListPtr nwfi= lters, virObjectLock(obj); def =3D obj->def; if (STREQ_NULLABLE(def->name, name)) - return obj; + return virObjectRef(obj); virObjectUnlock(obj); } =20 @@ -212,7 +223,7 @@ virNWFilterObjListFindInstantiateFilter(virNWFilterObjL= istPtr nwfilters, if (virNWFilterObjWantRemoved(obj)) { virReportError(VIR_ERR_NO_NWFILTER, _("Filter '%s' is in use."), filtername); - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); return NULL; } =20 @@ -247,7 +258,7 @@ _virNWFilterObjListDefLoopDetect(virNWFilterObjListPtr = nwfilters, if (obj) { rc =3D _virNWFilterObjListDefLoopDetect(nwfilters, obj->de= f, filtername); - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); if (rc < 0) break; } @@ -329,10 +340,10 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwf= ilters, _("filter with same UUID but different name " "('%s') already exists"), objdef->name); - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); return NULL; } - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); } else { if ((obj =3D virNWFilterObjListFindByName(nwfilters, def->name))) { char uuidstr[VIR_UUID_STRING_BUFLEN]; @@ -342,7 +353,7 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, virReportError(VIR_ERR_OPERATION_FAILED, _("filter '%s' already exists with uuid %s"), def->name, uuidstr); - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); return NULL; } } @@ -367,7 +378,7 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, /* trigger the update on VMs referencing the filter */ if (virNWFilterTriggerVMFilterRebuild() < 0) { obj->newDef =3D NULL; - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); return NULL; } =20 @@ -382,10 +393,10 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwf= ilters, =20 if (VIR_APPEND_ELEMENT_COPY(nwfilters->objs, nwfilters->count, obj) < 0) { - virObjectUnlock(obj); - virObjectUnref(obj); + virNWFilterObjEndAPI(&obj); return NULL; } + virObjectRef(obj); obj->def =3D def; =20 return obj; @@ -558,8 +569,7 @@ virNWFilterObjListLoadAllConfigs(virNWFilterObjListPtr = nwfilters, continue; =20 obj =3D virNWFilterObjListLoadConfig(nwfilters, configDir, entry->= d_name); - if (obj) - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); } =20 VIR_DIR_CLOSE(dir); diff --git a/src/conf/virnwfilterobj.h b/src/conf/virnwfilterobj.h index 9faba264a..0281bc5f5 100644 --- a/src/conf/virnwfilterobj.h +++ b/src/conf/virnwfilterobj.h @@ -41,6 +41,9 @@ struct _virNWFilterDriverState { bool watchingFirewallD; }; =20 +void +virNWFilterObjEndAPI(virNWFilterObjPtr *obj); + virNWFilterDefPtr virNWFilterObjGetDef(virNWFilterObjPtr obj); =20 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 67e3ade0f..edda56f80 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1039,6 +1039,7 @@ virNodeDeviceObjListRemove; =20 =20 # conf/virnwfilterobj.h +virNWFilterObjEndAPI; virNWFilterObjGetDef; virNWFilterObjGetNewDef; virNWFilterObjListAssignDef; diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index ffd603d70..c9bbae422 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -466,7 +466,7 @@ nwfilterLookupByUUID(virConnectPtr conn, nwfilter =3D virGetNWFilter(conn, def->name, def->uuid); =20 cleanup: - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); return nwfilter; } =20 @@ -496,7 +496,7 @@ nwfilterLookupByName(virConnectPtr conn, nwfilter =3D virGetNWFilter(conn, def->name, def->uuid); =20 cleanup: - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); return nwfilter; } =20 @@ -590,8 +590,7 @@ nwfilterDefineXML(virConnectPtr conn, =20 cleanup: virNWFilterDefFree(def); - if (obj) - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); =20 virNWFilterCallbackDriversUnlock(); virNWFilterUnlockFilterUpdates(); @@ -629,13 +628,10 @@ nwfilterUndefine(virNWFilterPtr nwfilter) goto cleanup; =20 virNWFilterObjListRemove(driver->nwfilters, obj); - obj =3D NULL; ret =3D 0; =20 cleanup: - if (obj) - virObjectUnlock(obj); - + virNWFilterObjEndAPI(&obj); virNWFilterCallbackDriversUnlock(); virNWFilterUnlockFilterUpdates(); nwfilterDriverUnlock(); @@ -667,7 +663,7 @@ nwfilterGetXMLDesc(virNWFilterPtr nwfilter, ret =3D virNWFilterDefFormat(def); =20 cleanup: - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); return ret; } =20 diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 106364c67..48d0e1769 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -316,7 +316,7 @@ virNWFilterInstReset(virNWFilterInstPtr inst) size_t i; =20 for (i =3D 0; i < inst->nfilters; i++) - virObjectUnlock(inst->filters[i]); + virNWFilterObjEndAPI(&inst->filters[i]); VIR_FREE(inst->filters); inst->nfilters =3D 0; =20 @@ -426,8 +426,7 @@ virNWFilterIncludeDefToRuleInst(virNWFilterDriverStateP= tr driver, if (ret < 0) virNWFilterInstReset(inst); virNWFilterHashTableFree(tmpvars); - if (obj) - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); return ret; } =20 @@ -541,7 +540,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr fi= lter, =20 /* create a temporary hashmap for depth-first tree traversal */ if (!(tmpvars =3D virNWFilterCreateVarsFrom(inc->params, vars)= )) { - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); return -1; } =20 @@ -565,7 +564,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr fi= lter, =20 virNWFilterHashTableFree(tmpvars); =20 - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); if (rc < 0) return -1; } @@ -839,7 +838,7 @@ virNWFilterInstantiateFilterUpdate(virNWFilterDriverSta= tePtr driver, virNWFilterHashTableFree(vars1); =20 err_exit: - virObjectUnlock(obj); + virNWFilterObjEndAPI(&obj); =20 VIR_FREE(str_ipaddr); VIR_FREE(str_macaddr); --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 4 06:27:53 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 1518432978938349.74047805680175; Mon, 12 Feb 2018 02:56:18 -0800 (PST) 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 525C55B303; Mon, 12 Feb 2018 10:56:17 +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 244C460C8D; Mon, 12 Feb 2018 10:56:17 +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 D82684A472; Mon, 12 Feb 2018 10:56:16 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w1CAr6Yb025694 for ; Mon, 12 Feb 2018 05:53:06 -0500 Received: by smtp.corp.redhat.com (Postfix) id 405AF1243EC2; Mon, 12 Feb 2018 10:53:06 +0000 (UTC) Received: from localhost.localdomain (ovpn-204-25.brq.redhat.com [10.40.204.25]) by smtp.corp.redhat.com (Postfix) with ESMTP id 80952124BB37; Mon, 12 Feb 2018 10:53:05 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Mon, 12 Feb 2018 11:52:52 +0100 Message-Id: <7ae2434d2c8d0157037721f5d90138777d707f03.1518432508.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 5/6] nwfilter: Convert _virNWFilterObjList to use virObjectRWLockable 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.26]); Mon, 12 Feb 2018 10:56:17 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Based-on-work-of: John Ferlan Signed-off-by: Michal Privoznik --- cfg.mk | 1 - src/conf/virdomainobjlist.c | 3 +- src/conf/virnwfilterobj.c | 409 +++++++++++++++++++++++++++----------= ---- src/conf/virnwfilterobj.h | 3 - src/libvirt_private.syms | 1 - src/nwfilter/nwfilter_driver.c | 4 +- 6 files changed, 279 insertions(+), 142 deletions(-) diff --git a/cfg.mk b/cfg.mk index 78f805b27..89779fb05 100644 --- a/cfg.mk +++ b/cfg.mk @@ -242,7 +242,6 @@ useless_free_options =3D \ # y virNWFilterIncludeDefFree # n virNWFilterFreeName (returns int) # y virNWFilterObjFree -# n virNWFilterObjListFree FIXME # y virNWFilterRuleDefFree # n virNWFilterRuleFreeInstanceData (typedef) # y virNWFilterRuleInstFree diff --git a/src/conf/virdomainobjlist.c b/src/conf/virdomainobjlist.c index 87a742b1e..4d3cc94b3 100644 --- a/src/conf/virdomainobjlist.c +++ b/src/conf/virdomainobjlist.c @@ -206,7 +206,8 @@ virDomainObjPtr virDomainObjListFindByName(virDomainObj= ListPtr doms, =20 virObjectRWLockRead(doms); obj =3D virHashLookup(doms->objsName, name); - virObjectRef(obj); + if (obj) + virObjectRef(obj); virObjectRWUnlock(doms); if (obj) { virObjectLock(obj); diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index 6a54628b6..bb4d0a036 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -43,11 +43,20 @@ struct _virNWFilterObj { }; =20 static virClassPtr virNWFilterObjClass; +static virClassPtr virNWFilterObjListClass; static void virNWFilterObjDispose(void *obj); +static void virNWFilterObjListDispose(void *obj); =20 struct _virNWFilterObjList { - size_t count; - virNWFilterObjPtr *objs; + virObjectRWLockable parent; + + /* uuid string -> virNWFilterObj mapping + * for O(1), lockless lookup-by-uuid */ + virHashTable *objs; + + /* name -> virNWFilterObj mapping for O(1), + * lockless lookup-by-name */ + virHashTable *objsName; }; =20 static int virNWFilterObjOnceInit(void) @@ -58,6 +67,12 @@ static int virNWFilterObjOnceInit(void) virNWFilterObjDispose))) return -1; =20 + if (!(virNWFilterObjListClass =3D virClassNew(virClassForObjectRWLocka= ble(), + "virNWFilterObjList", + sizeof(virNWFilterObjList), + virNWFilterObjListDispose)= )) + return -1; + return 0; } =20 @@ -123,14 +138,14 @@ virNWFilterObjWantRemoved(virNWFilterObjPtr obj) } =20 =20 -void -virNWFilterObjListFree(virNWFilterObjListPtr nwfilters) +static void +virNWFilterObjListDispose(void *obj) { - size_t i; - for (i =3D 0; i < nwfilters->count; i++) - virObjectUnref(nwfilters->objs[i]); - VIR_FREE(nwfilters->objs); - VIR_FREE(nwfilters); + + virNWFilterObjListPtr nwfilters =3D obj; + + virHashFree(nwfilters->objs); + virHashFree(nwfilters->objsName); } =20 =20 @@ -139,8 +154,18 @@ virNWFilterObjListNew(void) { virNWFilterObjListPtr nwfilters; =20 - if (VIR_ALLOC(nwfilters) < 0) + if (virNWFilterObjInitialize() < 0) return NULL; + + if (!(nwfilters =3D virObjectRWLockableNew(virNWFilterObjListClass))) + return NULL; + + if (!(nwfilters->objs =3D virHashCreate(10, virObjectFreeHashData)) || + !(nwfilters->objsName =3D virHashCreate(10, virObjectFreeHashData)= )) { + virObjectUnref(nwfilters); + return NULL; + } + return nwfilters; } =20 @@ -149,20 +174,35 @@ void virNWFilterObjListRemove(virNWFilterObjListPtr nwfilters, virNWFilterObjPtr obj) { - size_t i; + char uuidstr[VIR_UUID_STRING_BUFLEN]; =20 + virUUIDFormat(obj->def->uuid, uuidstr); + virObjectRef(obj); virObjectUnlock(obj); =20 - for (i =3D 0; i < nwfilters->count; i++) { - virObjectLock(nwfilters->objs[i]); - if (nwfilters->objs[i] =3D=3D obj) { - virNWFilterObjEndAPI(&nwfilters->objs[i]); + virObjectRWLockWrite(nwfilters); + virObjectLock(obj); + virHashRemoveEntry(nwfilters->objs, uuidstr); + virHashRemoveEntry(nwfilters->objsName, obj->def->name); + virObjectUnlock(obj); + virObjectUnref(obj); + virObjectRWUnlock(nwfilters); +} + + +static virNWFilterObjPtr +virNWFilterObjListFindByUUIDLocked(virNWFilterObjListPtr nwfilters, + const unsigned char *uuid) +{ + virNWFilterObjPtr obj =3D NULL; + char uuidstr[VIR_UUID_STRING_BUFLEN]; + + virUUIDFormat(uuid, uuidstr); =20 - VIR_DELETE_ELEMENT(nwfilters->objs, i, nwfilters->count); - break; - } - virObjectUnlock(nwfilters->objs[i]); - } + obj =3D virHashLookup(nwfilters->objs, uuidstr); + if (obj) + virObjectRef(obj); + return obj; } =20 =20 @@ -170,20 +210,27 @@ virNWFilterObjPtr virNWFilterObjListFindByUUID(virNWFilterObjListPtr nwfilters, const unsigned char *uuid) { - size_t i; virNWFilterObjPtr obj; - virNWFilterDefPtr def; =20 - for (i =3D 0; i < nwfilters->count; i++) { - obj =3D nwfilters->objs[i]; + virObjectRWLockRead(nwfilters); + obj =3D virNWFilterObjListFindByUUIDLocked(nwfilters, uuid); + virObjectRWUnlock(nwfilters); + if (obj) virObjectLock(obj); - def =3D obj->def; - if (!memcmp(def->uuid, uuid, VIR_UUID_BUFLEN)) - return virObjectRef(obj); - virObjectUnlock(obj); - } + return obj; +} =20 - return NULL; + +static virNWFilterObjPtr +virNWFilterObjListFindByNameLocked(virNWFilterObjListPtr nwfilters, + const char *name) +{ + virNWFilterObjPtr obj; + + obj =3D virHashLookup(nwfilters->objsName, name); + if (obj) + virObjectRef(obj); + return obj; } =20 =20 @@ -191,20 +238,14 @@ virNWFilterObjPtr virNWFilterObjListFindByName(virNWFilterObjListPtr nwfilters, const char *name) { - size_t i; virNWFilterObjPtr obj; - virNWFilterDefPtr def; =20 - for (i =3D 0; i < nwfilters->count; i++) { - obj =3D nwfilters->objs[i]; + virObjectRWLockRead(nwfilters); + obj =3D virNWFilterObjListFindByNameLocked(nwfilters, name); + virObjectRWUnlock(nwfilters); + if (obj) virObjectLock(obj); - def =3D obj->def; - if (STREQ_NULLABLE(def->name, name)) - return virObjectRef(obj); - virObjectUnlock(obj); - } - - return NULL; + return obj; } =20 =20 @@ -253,9 +294,10 @@ _virNWFilterObjListDefLoopDetect(virNWFilterObjListPtr= nwfilters, break; } =20 - obj =3D virNWFilterObjListFindByName(nwfilters, - entry->include->filterref); + obj =3D virNWFilterObjListFindByNameLocked(nwfilters, + entry->include->filte= rref); if (obj) { + virObjectLock(obj); rc =3D _virNWFilterObjListDefLoopDetect(nwfilters, obj->de= f, filtername); virNWFilterObjEndAPI(&obj); @@ -325,51 +367,52 @@ virNWFilterDefEqual(const virNWFilterDef *def1, } =20 =20 -virNWFilterObjPtr -virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfilters, - virNWFilterDefPtr def) +static virNWFilterObjPtr +virNWFilterObjListAssignDefLocked(virNWFilterObjListPtr nwfilters, + virNWFilterDefPtr def) { - virNWFilterObjPtr obj; - virNWFilterDefPtr objdef; + virNWFilterObjPtr obj =3D NULL; + virNWFilterObjPtr ret =3D NULL; + char uuidstr[VIR_UUID_STRING_BUFLEN]; =20 - if ((obj =3D virNWFilterObjListFindByUUID(nwfilters, def->uuid))) { - objdef =3D obj->def; + virUUIDFormat(def->uuid, uuidstr); =20 - if (STRNEQ(def->name, objdef->name)) { + if ((obj =3D virNWFilterObjListFindByUUIDLocked(nwfilters, def->uuid))= ) { + virObjectLock(obj); + + if (STRNEQ(def->name, obj->def->name)) { virReportError(VIR_ERR_OPERATION_FAILED, _("filter with same UUID but different name " "('%s') already exists"), - objdef->name); - virNWFilterObjEndAPI(&obj); - return NULL; + obj->def->name); + goto cleanup; } - virNWFilterObjEndAPI(&obj); } else { - if ((obj =3D virNWFilterObjListFindByName(nwfilters, def->name))) { - char uuidstr[VIR_UUID_STRING_BUFLEN]; + if ((obj =3D virNWFilterObjListFindByNameLocked(nwfilters, def->na= me))) { + virObjectLock(obj); =20 - objdef =3D obj->def; - virUUIDFormat(objdef->uuid, uuidstr); + virUUIDFormat(obj->def->uuid, uuidstr); virReportError(VIR_ERR_OPERATION_FAILED, - _("filter '%s' already exists with uuid %s"), + _("filter '%s' already exists with UUID %s"), def->name, uuidstr); - virNWFilterObjEndAPI(&obj); - return NULL; + goto cleanup; } } =20 + virNWFilterObjEndAPI(&obj); + if (virNWFilterObjListDefLoopDetect(nwfilters, def) < 0) { virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("filter would introduce a loop")); - return NULL; + goto cleanup; } =20 =20 - if ((obj =3D virNWFilterObjListFindByName(nwfilters, def->name))) { + if ((obj =3D virNWFilterObjListFindByNameLocked(nwfilters, def->name))= ) { + virObjectLock(obj); =20 - objdef =3D obj->def; - if (virNWFilterDefEqual(def, objdef)) { - virNWFilterDefFree(objdef); + if (virNWFilterDefEqual(def, obj->def)) { + virNWFilterDefFree(obj->def); obj->def =3D def; return obj; } @@ -382,7 +425,7 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, return NULL; } =20 - virNWFilterDefFree(objdef); + virNWFilterDefFree(obj->def); obj->def =3D def; obj->newDef =3D NULL; return obj; @@ -391,35 +434,114 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nw= filters, if (!(obj =3D virNWFilterObjNew())) return NULL; =20 - if (VIR_APPEND_ELEMENT_COPY(nwfilters->objs, - nwfilters->count, obj) < 0) { - virNWFilterObjEndAPI(&obj); - return NULL; + if (virHashAddEntry(nwfilters->objs, uuidstr, obj) < 0) + goto cleanup; + + if (virHashAddEntry(nwfilters->objsName, def->name, obj) < 0) { + virHashRemoveEntry(nwfilters->objs, uuidstr); + goto cleanup; } virObjectRef(obj); + + /* Increase refcounter again. We need two references for the + * hash tables above and one to return to the caller. */ + virObjectRef(obj); obj->def =3D def; =20 + ret =3D obj; + obj =3D NULL; + + cleanup: + virNWFilterObjEndAPI(&obj); + return ret; +} + + +virNWFilterObjPtr +virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfilters, + virNWFilterDefPtr def) +{ + virNWFilterObjPtr obj; + + virObjectRWLockWrite(nwfilters); + obj =3D virNWFilterObjListAssignDefLocked(nwfilters, def); + virObjectRWUnlock(nwfilters); return obj; } =20 =20 +struct virNWFilterObjListData { + virNWFilterObjListFilter filter; + virConnectPtr conn; + int count; +}; + + +static int +virNWFilterObjListCount(void *payload, + const void *name ATTRIBUTE_UNUSED, + void *opaque) +{ + virNWFilterObjPtr obj =3D payload; + struct virNWFilterObjListData *data =3D opaque; + + virObjectLock(obj); + if (!data->filter || + data->filter(data->conn, obj->def)) + data->count++; + virObjectUnlock(obj); + return 0; +} + + int virNWFilterObjListNumOfNWFilters(virNWFilterObjListPtr nwfilters, virConnectPtr conn, virNWFilterObjListFilter filter) { - size_t i; - int nfilters =3D 0; - - for (i =3D 0; i < nwfilters->count; i++) { - virNWFilterObjPtr obj =3D nwfilters->objs[i]; - virObjectLock(obj); - if (!filter || filter(conn, obj->def)) - nfilters++; - virObjectUnlock(obj); + struct virNWFilterObjListData data =3D { filter, conn, 0 }; + + virObjectRWLockRead(nwfilters); + virHashForEach(nwfilters->objs, virNWFilterObjListCount, &data); + virObjectRWUnlock(nwfilters); + return data.count; +} + + +struct virNWFilterNameData { + virNWFilterObjListFilter filter; + virConnectPtr conn; + int oom; + int numnames; + int maxnames; + char **const names; +}; + + +static int +virNWFilterObjListCopyNames(void *payload, + const void *name ATTRIBUTE_UNUSED, + void *opaque) +{ + virNWFilterObjPtr obj =3D payload; + struct virNWFilterNameData *data =3D opaque; + + if (data->oom) + return 0; + + virObjectLock(obj); + if (data->filter && + !data->filter(data->conn, obj->def)) + goto cleanup; + if (data->numnames < data->maxnames) { + if (VIR_STRDUP(data->names[data->numnames], obj->def->name) < 0) + data->oom =3D 1; + else + data->numnames++; } - - return nfilters; + cleanup: + virObjectUnlock(obj); + return 0; } =20 =20 @@ -430,31 +552,64 @@ virNWFilterObjListGetNames(virNWFilterObjListPtr nwfi= lters, char **const names, int maxnames) { - int nnames =3D 0; + struct virNWFilterNameData data =3D {filter, conn, 0, 0, maxnames, nam= es}; size_t i; - virNWFilterDefPtr def; - - for (i =3D 0; i < nwfilters->count && nnames < maxnames; i++) { - virNWFilterObjPtr obj =3D nwfilters->objs[i]; - virObjectLock(obj); - def =3D obj->def; - if (!filter || filter(conn, def)) { - if (VIR_STRDUP(names[nnames], def->name) < 0) { - virObjectUnlock(obj); - goto failure; - } - nnames++; - } - virObjectUnlock(obj); + + virObjectRWLockRead(nwfilters); + virHashForEach(nwfilters->objs, virNWFilterObjListCopyNames, &data); + virObjectRWUnlock(nwfilters); + if (data.oom) { + for (i =3D 0; i < data.numnames; i++) + VIR_FREE(data.names[i]); + return -1; + } + + return data.numnames; +} + + +struct virNWFilterListData { + virConnectPtr conn; + virNWFilterPtr *nwfilters; + virNWFilterObjListFilter filter; + int nnwfilters; + bool error; +}; + + +static int +virNWFilterObjListPopulate(void *payload, + const void *name ATTRIBUTE_UNUSED, + void *opaque) +{ + struct virNWFilterListData *data =3D opaque; + virNWFilterObjPtr obj =3D payload; + virNWFilterPtr nwfilter =3D NULL; + + if (data->error) + return 0; + + virObjectLock(obj); + + if (data->filter && + !data->filter(data->conn, obj->def)) + goto cleanup; + + if (!data->nwfilters) { + data->nnwfilters++; + goto cleanup; } =20 - return nnames; + if (!(nwfilter =3D virGetNWFilter(data->conn, obj->def->name, obj->def= ->uuid))) { + data->error =3D true; + goto cleanup; + } =20 - failure: - while (--nnames >=3D 0) - VIR_FREE(names[nnames]); + data->nwfilters[data->nnwfilters++] =3D nwfilter; =20 - return -1; + cleanup: + virObjectUnlock(obj); + return 0; } =20 =20 @@ -464,47 +619,33 @@ virNWFilterObjListExport(virConnectPtr conn, virNWFilterPtr **filters, virNWFilterObjListFilter filter) { - virNWFilterPtr *tmp_filters =3D NULL; - int nfilters =3D 0; - virNWFilterPtr nwfilter =3D NULL; - virNWFilterObjPtr obj =3D NULL; - virNWFilterDefPtr def; - size_t i; int ret =3D -1; + struct virNWFilterListData data =3D {.conn =3D conn, .nwfilters =3D NU= LL, + .filter =3D filter, .nnwfilters =3D 0, .error =3D false}; =20 - if (!filters) { - ret =3D nwfilters->count; + virObjectRWLockRead(nwfilters); + if (filters && VIR_ALLOC_N(data.nwfilters, virHashSize(nwfilters->objs= ) + 1) < 0) goto cleanup; - } =20 - if (VIR_ALLOC_N(tmp_filters, nwfilters->count + 1) < 0) + virHashForEach(nwfilters->objs, virNWFilterObjListPopulate, &data); + + if (data.error) goto cleanup; =20 - for (i =3D 0; i < nwfilters->count; i++) { - obj =3D nwfilters->objs[i]; - virObjectLock(obj); - def =3D obj->def; - if (!filter || filter(conn, def)) { - if (!(nwfilter =3D virGetNWFilter(conn, def->name, def->uuid))= ) { - virObjectUnlock(obj); - goto cleanup; - } - tmp_filters[nfilters++] =3D nwfilter; - } - virObjectUnlock(obj); + if (data.nnwfilters) { + /* trim the array to the final size */ + ignore_value(VIR_REALLOC_N(data.nwfilters, data.nnwfilters + 1)); + *filters =3D data.nwfilters; + data.nwfilters =3D NULL; } =20 - *filters =3D tmp_filters; - tmp_filters =3D NULL; - ret =3D nfilters; - + ret =3D data.nnwfilters; cleanup: - if (tmp_filters) { - for (i =3D 0; i < nfilters; i ++) - virObjectUnref(tmp_filters[i]); - } - VIR_FREE(tmp_filters); + virObjectRWUnlock(nwfilters); + while (data.nwfilters && data.nnwfilters) + virObjectUnref(data.nwfilters[--data.nnwfilters]); =20 + VIR_FREE(data.nwfilters); return ret; } =20 diff --git a/src/conf/virnwfilterobj.h b/src/conf/virnwfilterobj.h index 0281bc5f5..caff76e9a 100644 --- a/src/conf/virnwfilterobj.h +++ b/src/conf/virnwfilterobj.h @@ -56,9 +56,6 @@ virNWFilterObjWantRemoved(virNWFilterObjPtr obj); virNWFilterObjListPtr virNWFilterObjListNew(void); =20 -void -virNWFilterObjListFree(virNWFilterObjListPtr nwfilters); - void virNWFilterObjListRemove(virNWFilterObjListPtr nwfilters, virNWFilterObjPtr obj); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index edda56f80..fe63defb3 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1047,7 +1047,6 @@ virNWFilterObjListExport; virNWFilterObjListFindByName; virNWFilterObjListFindByUUID; virNWFilterObjListFindInstantiateFilter; -virNWFilterObjListFree; virNWFilterObjListGetNames; virNWFilterObjListLoadAllConfigs; virNWFilterObjListNew; diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index c9bbae422..093844c9e 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -270,7 +270,7 @@ nwfilterStateInitialize(bool privileged, virNWFilterIPAddrMapShutdown(); =20 err_free_driverstate: - virNWFilterObjListFree(driver->nwfilters); + virObjectUnref(driver->nwfilters); VIR_FREE(driver); =20 return -1; @@ -354,7 +354,7 @@ nwfilterStateCleanup(void) } =20 /* free inactive nwfilters */ - virNWFilterObjListFree(driver->nwfilters); + virObjectUnref(driver->nwfilters); =20 virMutexDestroy(&driver->lock); VIR_FREE(driver); --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 4 06:27:53 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 15184329821253.095983523791574; Mon, 12 Feb 2018 02:56:22 -0800 (PST) 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 BB40FC0568E2; Mon, 12 Feb 2018 10:56:20 +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 6C1CB60C8D; Mon, 12 Feb 2018 10:56:20 +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 2E60718033E7; Mon, 12 Feb 2018 10:56:20 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w1CAr7SA025706 for ; Mon, 12 Feb 2018 05:53:07 -0500 Received: by smtp.corp.redhat.com (Postfix) id 21BBF1243EC2; Mon, 12 Feb 2018 10:53:07 +0000 (UTC) Received: from localhost.localdomain (ovpn-204-25.brq.redhat.com [10.40.204.25]) by smtp.corp.redhat.com (Postfix) with ESMTP id 85D9A124BB36; Mon, 12 Feb 2018 10:53:06 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Mon, 12 Feb 2018 11:52:53 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 6/6] nwfilter: Remove need for nwfilterDriverLock in some API's 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.32]); Mon, 12 Feb 2018 10:56:21 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" From: John Ferlan Now that nwfilters object list is self locking, it's no longer necessary to hold the driver level lock for certain API's. Signed-off-by: John Ferlan Signed-off-by: Michal Privoznik --- src/nwfilter/nwfilter_driver.c | 47 +++++++++++---------------------------= ---- 1 file changed, 12 insertions(+), 35 deletions(-) diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 093844c9e..d49c32e4c 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -295,6 +295,10 @@ nwfilterStateReload(void) /* shut down all threads -- they will be restarted if necessary */ virNWFilterLearnThreadsTerminate(true); =20 + /* Serialization of virNWFilterObjListLoadAllConfigs is extremely + * important as it relates to virNWFilterObjListFindInstantiateFilter + * processing via virNWFilterTriggerVMFilterRebuild that occurs during + * virNWFilterObjListAssignDef */ nwfilterDriverLock(); virNWFilterWriteLockFilterUpdates(); virNWFilterCallbackDriversLock(); @@ -452,11 +456,7 @@ nwfilterLookupByUUID(virConnectPtr conn, virNWFilterDefPtr def; virNWFilterPtr nwfilter =3D NULL; =20 - nwfilterDriverLock(); - obj =3D nwfilterObjFromNWFilter(uuid); - nwfilterDriverUnlock(); - - if (!obj) + if (!(obj =3D nwfilterObjFromNWFilter(uuid))) return NULL; def =3D virNWFilterObjGetDef(obj); =20 @@ -479,11 +479,7 @@ nwfilterLookupByName(virConnectPtr conn, virNWFilterDefPtr def; virNWFilterPtr nwfilter =3D NULL; =20 - nwfilterDriverLock(); - obj =3D virNWFilterObjListFindByName(driver->nwfilters, name); - nwfilterDriverUnlock(); - - if (!obj) { + if (!(obj =3D virNWFilterObjListFindByName(driver->nwfilters, name))) { virReportError(VIR_ERR_NO_NWFILTER, _("no nwfilter with matching name '%s'"), name); return NULL; @@ -517,17 +513,12 @@ nwfilterConnectListNWFilters(virConnectPtr conn, char **const names, int maxnames) { - int nnames; - if (virConnectListNWFiltersEnsureACL(conn) < 0) return -1; =20 - nwfilterDriverLock(); - nnames =3D virNWFilterObjListGetNames(driver->nwfilters, conn, - virConnectListNWFiltersCheckACL, - names, maxnames); - nwfilterDriverUnlock(); - return nnames; + return virNWFilterObjListGetNames(driver->nwfilters, conn, + virConnectListNWFiltersCheckACL, + names, maxnames); } =20 =20 @@ -536,19 +527,13 @@ nwfilterConnectListAllNWFilters(virConnectPtr conn, virNWFilterPtr **nwfilters, unsigned int flags) { - int ret; - virCheckFlags(0, -1); =20 if (virConnectListAllNWFiltersEnsureACL(conn) < 0) return -1; =20 - nwfilterDriverLock(); - ret =3D virNWFilterObjListExport(conn, driver->nwfilters, nwfilters, - virConnectListAllNWFiltersCheckACL); - nwfilterDriverUnlock(); - - return ret; + return virNWFilterObjListExport(conn, driver->nwfilters, nwfilters, + virConnectListAllNWFiltersCheckACL); } =20 static virNWFilterPtr @@ -566,7 +551,6 @@ nwfilterDefineXML(virConnectPtr conn, return NULL; } =20 - nwfilterDriverLock(); virNWFilterWriteLockFilterUpdates(); virNWFilterCallbackDriversLock(); =20 @@ -594,7 +578,6 @@ nwfilterDefineXML(virConnectPtr conn, =20 virNWFilterCallbackDriversUnlock(); virNWFilterUnlockFilterUpdates(); - nwfilterDriverUnlock(); return nwfilter; } =20 @@ -606,7 +589,6 @@ nwfilterUndefine(virNWFilterPtr nwfilter) virNWFilterDefPtr def; int ret =3D -1; =20 - nwfilterDriverLock(); virNWFilterWriteLockFilterUpdates(); virNWFilterCallbackDriversLock(); =20 @@ -634,7 +616,6 @@ nwfilterUndefine(virNWFilterPtr nwfilter) virNWFilterObjEndAPI(&obj); virNWFilterCallbackDriversUnlock(); virNWFilterUnlockFilterUpdates(); - nwfilterDriverUnlock(); return ret; } =20 @@ -649,11 +630,7 @@ nwfilterGetXMLDesc(virNWFilterPtr nwfilter, =20 virCheckFlags(0, NULL); =20 - nwfilterDriverLock(); - obj =3D nwfilterObjFromNWFilter(nwfilter->uuid); - nwfilterDriverUnlock(); - - if (!obj) + if (!(obj =3D nwfilterObjFromNWFilter(nwfilter->uuid))) return NULL; def =3D virNWFilterObjGetDef(obj); =20 --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list