From nobody Fri May 16 05:29:44 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 150115607215248.87713277857995; Thu, 27 Jul 2017 04:47:52 -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 CDF18D4D89; Thu, 27 Jul 2017 11:47:48 +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 9F9F56BF8D; Thu, 27 Jul 2017 11:47:48 +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 545E5410B1; Thu, 27 Jul 2017 11:47:48 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v6RBlZJe028565 for ; Thu, 27 Jul 2017 07:47:35 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1B9665D73C; Thu, 27 Jul 2017 11:47:35 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9920C5D72D for ; Thu, 27 Jul 2017 11:47:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com CDF18D4D89 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 27 Jul 2017 13:47:24 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 4/7] virNetworkObjList: Derive from 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Thu, 27 Jul 2017 11:47:50 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" There is no reason why two threads trying to look up two networks should mutually exclude each other. Utilize new virObjectRWLockable that was just introduced. Signed-off-by: Michal Privoznik --- src/conf/virnetworkobj.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index d8eca1e90..79cbee5f3 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -38,7 +38,7 @@ VIR_LOG_INIT("conf.virnetworkobj"); #define CLASS_ID_BITMAP_SIZE (1<<16) =20 struct _virNetworkObjList { - virObjectLockable parent; + virObjectRWLockable parent; =20 virHashTablePtr objs; }; @@ -57,7 +57,7 @@ virNetworkObjOnceInit(void) virNetworkObjDispose))) return -1; =20 - if (!(virNetworkObjListClass =3D virClassNew(virClassForObjectLockable= (), + if (!(virNetworkObjListClass =3D virClassNew(virClassForObjectRWLockab= le(), "virNetworkObjList", sizeof(virNetworkObjList), virNetworkObjListDispose))) @@ -115,7 +115,7 @@ virNetworkObjListNew(void) if (virNetworkObjInitialize() < 0) return NULL; =20 - if (!(nets =3D virObjectLockableNew(virNetworkObjListClass))) + if (!(nets =3D virObjectRWLockableNew(virNetworkObjListClass))) return NULL; =20 if (!(nets->objs =3D virHashCreate(50, virObjectFreeHashData))) { @@ -159,7 +159,7 @@ virNetworkObjFindByUUID(virNetworkObjListPtr nets, { virNetworkObjPtr ret; =20 - virObjectLock(nets); + virObjectLockRead(nets); ret =3D virNetworkObjFindByUUIDLocked(nets, uuid); virObjectUnlock(nets); if (ret) @@ -213,7 +213,7 @@ virNetworkObjFindByName(virNetworkObjListPtr nets, { virNetworkObjPtr ret; =20 - virObjectLock(nets); + virObjectLockRead(nets); ret =3D virNetworkObjFindByNameLocked(nets, name); virObjectUnlock(nets); if (ret) @@ -961,7 +961,7 @@ virNetworkObjBridgeInUse(virNetworkObjListPtr nets, virNetworkObjPtr obj; struct virNetworkObjBridgeInUseHelperData data =3D {bridge, skipname}; =20 - virObjectLock(nets); + virObjectLockRead(nets); obj =3D virHashSearch(nets->objs, virNetworkObjBridgeInUseHelper, &dat= a, NULL); virObjectUnlock(nets); =20 @@ -1148,7 +1148,7 @@ virNetworkObjListExport(virConnectPtr conn, int ret =3D -1; struct virNetworkObjListData data =3D { conn, NULL, filter, flags, 0, = false}; =20 - virObjectLock(netobjs); + virObjectLockRead(netobjs); if (nets && VIR_ALLOC_N(data.nets, virHashSize(netobjs->objs) + 1) < 0) goto cleanup; =20 @@ -1213,7 +1213,7 @@ virNetworkObjListForEach(virNetworkObjListPtr nets, void *opaque) { struct virNetworkObjListForEachHelperData data =3D {callback, opaque, = 0}; - virObjectLock(nets); + virObjectLockRead(nets); virHashForEach(nets->objs, virNetworkObjListForEachHelper, &data); virObjectUnlock(nets); return data.ret; @@ -1280,7 +1280,7 @@ virNetworkObjListGetNames(virNetworkObjListPtr nets, struct virNetworkObjListGetHelperData data =3D { conn, filter, names, nnames, active, 0, false}; =20 - virObjectLock(nets); + virObjectLockRead(nets); virHashForEach(nets->objs, virNetworkObjListGetHelper, &data); virObjectUnlock(nets); =20 @@ -1306,7 +1306,7 @@ virNetworkObjListNumOfNetworks(virNetworkObjListPtr n= ets, struct virNetworkObjListGetHelperData data =3D { conn, filter, NULL, -1, active, 0, false}; =20 - virObjectLock(nets); + virObjectLockRead(nets); virHashForEach(nets->objs, virNetworkObjListGetHelper, &data); virObjectUnlock(nets); =20 --=20 2.13.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list