From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468653; cv=none; d=zohomail.com; s=zohoarc; b=lAyS1+ZZGYmhMkOf6+ECBtKC/WXiAVhAQ+CP31MAVFQgHZ4ZHdhCOP7GoBgrunFqV1HyXRBWYs4P82iL0D2Mu2nUL9eGTI7lbDdnZHfAm2zVpkhgsHwkiwpC6DcRS9T/0HoAGNnbVcUECo8l7Bjgfo5tvh6Wz8uocF7sCArNMwk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468653; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=iX6GkPtgpfDA6AeizBcLKgN0gthyrdiNA5kJ0W0357k=; b=mv/yPALvILM+Wj822CicyR+CNw5yeDwuCRm1h5NrjC0+KJIgD8B/Qfny+0XPL8u/oNUU9aPmyOrzP6ymn49eStRFSGoRn7L569UlyKVHs16yhV1aT4kiSljKh87cOe7enLZecTJNdjohJ56l6KEsiVdpYM+MSvuFaKV1STY05uY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1647468653055523.19771495084; Wed, 16 Mar 2022 15:10:53 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-637-T3azg4HDMeWx9SRq_i0MAg-1; Wed, 16 Mar 2022 18:10:48 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A211F18A658C; Wed, 16 Mar 2022 22:10:46 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8C44AC44AF1; Wed, 16 Mar 2022 22:10:46 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 083CE1953541; Wed, 16 Mar 2022 22:10:45 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 274AE1949761 for ; Wed, 16 Mar 2022 22:10:44 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 18608C44AE7; Wed, 16 Mar 2022 22:10:44 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9CD64C44AE5; Wed, 16 Mar 2022 22:10:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468652; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=iX6GkPtgpfDA6AeizBcLKgN0gthyrdiNA5kJ0W0357k=; b=VQP5IbnwcJoLhPXfjGWVYttAFpjxw+N+zrMgbDNbjRQH8mPqAwvw+9JcFlgBTjI7yKspOM TGjdLUq28NhGsAB9PKe+R6RquBk8OPK8cEr3VqnCwnLpBbuhePxQC93uty9M0xyknmL7UF Xzu86FkyYpgO1KzN2LFPNV7DL19Ur3w= X-MC-Unique: T3azg4HDMeWx9SRq_i0MAg-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 01/13] nwfilter_driver: Statically initialize mutex Date: Wed, 16 Mar 2022 23:10:30 +0100 Message-Id: <20220316221042.97147-2-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647469554572100001 Content-Type: text/plain; charset="utf-8" This enables a later patch to simplify locking during initialization and cleanup of virNWFilterDriverState. Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/conf/virnwfilterobj.h | 1 - src/nwfilter/nwfilter_driver.c | 11 +++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/conf/virnwfilterobj.h b/src/conf/virnwfilterobj.h index 44ba31f732..c365d0f28a 100644 --- a/src/conf/virnwfilterobj.h +++ b/src/conf/virnwfilterobj.h @@ -30,7 +30,6 @@ typedef struct _virNWFilterObjList virNWFilterObjList; =20 typedef struct _virNWFilterDriverState virNWFilterDriverState; struct _virNWFilterDriverState { - virMutex lock; bool privileged; =20 /* pid file FD, ensures two copies of the driver can't use the same ro= ot */ diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 3ce8fce7f9..6ee69214f1 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -57,13 +57,15 @@ static int nwfilterStateCleanup(void); =20 static int nwfilterStateReload(void); =20 +static virMutex driverMutex =3D VIR_MUTEX_INITIALIZER; + static void nwfilterDriverLock(void) { - virMutexLock(&driver->lock); + virMutexLock(&driverMutex); } static void nwfilterDriverUnlock(void) { - virMutexUnlock(&driver->lock); + virMutexUnlock(&driverMutex); } =20 #ifdef WITH_FIREWALLD @@ -174,10 +176,8 @@ nwfilterStateInitialize(bool privileged, driver =3D g_new0(virNWFilterDriverState, 1); =20 driver->lockFD =3D -1; - if (virMutexInit(&driver->lock) < 0) - goto err_free_driverstate; - driver->privileged =3D privileged; + if (!(driver->nwfilters =3D virNWFilterObjListNew())) goto error; =20 @@ -343,7 +343,6 @@ nwfilterStateCleanup(void) /* free inactive nwfilters */ virNWFilterObjListFree(driver->nwfilters); =20 - virMutexDestroy(&driver->lock); g_clear_pointer(&driver, g_free); =20 return 0; --=20 2.31.1 From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468652; cv=none; d=zohomail.com; s=zohoarc; b=DD4MvGyPpndNdE4YDwf9Z8Uq9Ekf7hd1ur1laXMh3p3hn4F/T0LzQr629TCjCQ8nz+DKCKsYbRBAVIl+U8E16y6jXRxAPilSOtG/xDQrK5phQBKvohtozD4fNzGvOIGekViVbQVMm9gbyyKGcYyZFaM7uQl9+jq+tcu9lURVvYY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468652; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=StafaMOvGanSETcd8B1auHEbMLvH4Jbl0jRobntOrXY=; b=a0q8FGHPi+DRCCU6BL8ONazji/bABcX/zP/nIxEvFqVy9hXNxxeluCn0mi0OsS2wwdSKr4p04P9jSz0wnhSv9OZ5JbCGkv0HxhWq1spD6i3etTY1PQRow2cknjSFjcJBXWknqdZdsdLYBKENRvab79KMdIzr0uvCF8Pg1a+gC9w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1647468652793128.8700663578004; Wed, 16 Mar 2022 15:10:52 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-116--snZ-b8GNmmo4yERzvK5Og-1; Wed, 16 Mar 2022 18:10:49 -0400 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 946E93C18542; Wed, 16 Mar 2022 22:10:47 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 73FDA401E7A; Wed, 16 Mar 2022 22:10:47 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 7A740194034E; Wed, 16 Mar 2022 22:10:46 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id D1D84194036F for ; Wed, 16 Mar 2022 22:10:44 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id BF834C44AE7; Wed, 16 Mar 2022 22:10:44 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id 505B6C44AE5; Wed, 16 Mar 2022 22:10:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468651; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=StafaMOvGanSETcd8B1auHEbMLvH4Jbl0jRobntOrXY=; b=fJT2QHSkUNhjlEVtg01wln3rJO2hcvrsag20/CYHouLtyLrKAh3TZ5m8+FI5neh9J98Iha maD3Z7mEsl4IqFK1Kt3IqkRb9fvXj/I0H4dKOIR++QJJjVzYKQSVvjJWFpRNu1ynKg5kFY DmAoFEyHouDhnLo4ebpHlhdNPJK9FZU= X-MC-Unique: -snZ-b8GNmmo4yERzvK5Og-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 02/13] nwfilter_driver: Split up nwfilterStateCleanup Date: Wed, 16 Mar 2022 23:10:31 +0100 Message-Id: <20220316221042.97147-3-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647468653511100003 Content-Type: text/plain; charset="utf-8" This allows nwfilterStateCleanupLocked to be used in nwfilterStateInitialize in a later patch. Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/nwfilter/nwfilter_driver.c | 89 +++++++++++++++++----------------- 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 6ee69214f1..eefb2b0fff 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -53,8 +53,6 @@ VIR_LOG_INIT("nwfilter.nwfilter_driver"); =20 static virNWFilterDriverState *driver; =20 -static int nwfilterStateCleanup(void); - static int nwfilterStateReload(void); =20 static virMutex driverMutex =3D VIR_MUTEX_INITIALIZER; @@ -150,6 +148,51 @@ virNWFilterTriggerRebuildImpl(void *opaque) } =20 =20 +static int +nwfilterStateCleanupLocked(void) +{ + if (!driver) + return -1; + + if (driver->privileged) { + virNWFilterConfLayerShutdown(); + virNWFilterDHCPSnoopShutdown(); + virNWFilterLearnShutdown(); + virNWFilterIPAddrMapShutdown(); + virNWFilterTechDriversShutdown(); + nwfilterDriverRemoveDBusMatches(); + + if (driver->lockFD !=3D -1) + virPidFileRelease(driver->stateDir, "driver", driver->lockFD); + + g_free(driver->stateDir); + g_free(driver->configDir); + g_free(driver->bindingDir); + } + + virObjectUnref(driver->bindings); + + /* free inactive nwfilters */ + virNWFilterObjListFree(driver->nwfilters); + + g_clear_pointer(&driver, g_free); + + return 0; +} + +/** + * nwfilterStateCleanup: + * + * Shutdown the nwfilter driver, it will stop all active nwfilters + */ +static int +nwfilterStateCleanup(void) +{ + VIR_LOCK_GUARD lock =3D virLockGuardLock(&driverMutex); + return nwfilterStateCleanupLocked(); +} + + /** * nwfilterStateInitialize: * @@ -307,48 +350,6 @@ nwfilterStateReload(void) } =20 =20 -/** - * nwfilterStateCleanup: - * - * Shutdown the nwfilter driver, it will stop all active nwfilters - */ -static int -nwfilterStateCleanup(void) -{ - if (!driver) - return -1; - - if (driver->privileged) { - virNWFilterConfLayerShutdown(); - virNWFilterDHCPSnoopShutdown(); - virNWFilterLearnShutdown(); - virNWFilterIPAddrMapShutdown(); - virNWFilterTechDriversShutdown(); - - nwfilterDriverLock(); - - nwfilterDriverRemoveDBusMatches(); - - if (driver->lockFD !=3D -1) - virPidFileRelease(driver->stateDir, "driver", driver->lockFD); - - g_free(driver->stateDir); - g_free(driver->configDir); - g_free(driver->bindingDir); - nwfilterDriverUnlock(); - } - - virObjectUnref(driver->bindings); - - /* free inactive nwfilters */ - virNWFilterObjListFree(driver->nwfilters); - - g_clear_pointer(&driver, g_free); - - return 0; -} - - static virDrvOpenStatus nwfilterConnectOpen(virConnectPtr conn, virConnectAuthPtr auth G_GNUC_UNUSED, --=20 2.31.1 From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468657; cv=none; d=zohomail.com; s=zohoarc; b=ctp8iFI4YzSpwNnPNrDUWwQhjmu8x/m0JiRvV/dsUzbjHLPRLL1IwoBoiIKZYzpiairjQW+zRl63Jwd2hU7GgDWpRx762y6d0w9PkbhfbPL8UsRW9P9RJys3wO0kps9Wsv8jB9lOElxJlhAvEGnDffab7iJCiCdGtMB6qL9Zuq4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468657; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=prOIQc3t+1kljSoTrHSKAM2O/vyb8wSSWcICJD7FbeQ=; b=j/SX3HSY4FWT7zg7K0qy2+8VXJ8wLBRzmI7zS7e2evS8H+yIkHU6YYDJ8wslKn6hpxNH81hY6G48SDSQ607qi7C3grK85F85yH5XV1J4mmMUQXP1n3nmr2UETxQkeXbiMYOcef+Df9p7JjLHmUyLRcG64vCpRfFf+bP6x5Ljh8s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1647468657022862.5459147212405; Wed, 16 Mar 2022 15:10:57 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-623-IHOGGhX6MDOA-ZOdMmVWAA-1; Wed, 16 Mar 2022 18:10:55 -0400 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 22B672A2AD40; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id D1825469A47; Wed, 16 Mar 2022 22:10:50 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 36C97194036F; Wed, 16 Mar 2022 22:10:50 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 7FC24194034E for ; Wed, 16 Mar 2022 22:10:45 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 74441C44AE8; Wed, 16 Mar 2022 22:10:45 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id 03F4DC44AE5; Wed, 16 Mar 2022 22:10:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468657; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=prOIQc3t+1kljSoTrHSKAM2O/vyb8wSSWcICJD7FbeQ=; b=XyuTCcedzWPCsuwc5QaOQbdlEAqOl/mPj35lQkOb4Gy/QeFNCQEbHpoGdl8ySZOEdW1x1m eFX6n/CNtjcK0rIT4uOq4qGRVxnD5MS1VCPr9Vocir4e/sC23ez7t6gz4QhuLvBTOSLEt/ StjG4JCPpXub+Xe8Y2D5btfo3rRJ5EY= X-MC-Unique: IHOGGhX6MDOA-ZOdMmVWAA-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 03/13] nwfilter_driver: Use automatic mutex management Date: Wed, 16 Mar 2022 23:10:32 +0100 Message-Id: <20220316221042.97147-4-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.9 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647468674696100003 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/nwfilter/nwfilter_driver.c | 83 ++++++++++++++-------------------- 1 file changed, 34 insertions(+), 49 deletions(-) diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index eefb2b0fff..bfda96b7ed 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -57,15 +57,6 @@ static int nwfilterStateReload(void); =20 static virMutex driverMutex =3D VIR_MUTEX_INITIALIZER; =20 -static void nwfilterDriverLock(void) -{ - virMutexLock(&driverMutex); -} -static void nwfilterDriverUnlock(void) -{ - virMutexUnlock(&driverMutex); -} - #ifdef WITH_FIREWALLD =20 static void @@ -204,6 +195,7 @@ nwfilterStateInitialize(bool privileged, virStateInhibitCallback callback G_GNUC_UNUSED, void *opaque G_GNUC_UNUSED) { + VIR_LOCK_GUARD lock =3D virLockGuardLock(&driverMutex); GDBusConnection *sysbus =3D NULL; =20 if (root !=3D NULL) { @@ -230,8 +222,6 @@ nwfilterStateInitialize(bool privileged, if (!privileged) return VIR_DRV_STATE_INIT_SKIPPED; =20 - nwfilterDriverLock(); - driver->stateDir =3D g_strdup(RUNSTATEDIR "/libvirt/nwfilter"); =20 if (g_mkdir_with_parents(driver->stateDir, S_IRWXU) < 0) { @@ -290,13 +280,10 @@ nwfilterStateInitialize(bool privileged, if (virNWFilterBuildAll(driver, false) < 0) goto error; =20 - nwfilterDriverUnlock(); - return VIR_DRV_STATE_INIT_COMPLETE; =20 error: - nwfilterDriverUnlock(); - nwfilterStateCleanup(); + nwfilterStateCleanupLocked(); =20 return VIR_DRV_STATE_INIT_ERROR; =20 @@ -335,16 +322,15 @@ nwfilterStateReload(void) /* shut down all threads -- they will be restarted if necessary */ virNWFilterLearnThreadsTerminate(true); =20 - nwfilterDriverLock(); - virNWFilterWriteLockFilterUpdates(); - - virNWFilterObjListLoadAllConfigs(driver->nwfilters, driver->configDir); + VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) { + virNWFilterWriteLockFilterUpdates(); =20 - virNWFilterUnlockFilterUpdates(); + virNWFilterObjListLoadAllConfigs(driver->nwfilters, driver->config= Dir); =20 - virNWFilterBuildAll(driver, false); + virNWFilterUnlockFilterUpdates(); =20 - nwfilterDriverUnlock(); + virNWFilterBuildAll(driver, false); + } =20 return 0; } @@ -422,13 +408,13 @@ static virNWFilterPtr nwfilterLookupByUUID(virConnectPtr conn, const unsigned char *uuid) { - virNWFilterObj *obj; + virNWFilterObj *obj =3D NULL; virNWFilterDef *def; virNWFilterPtr nwfilter =3D NULL; =20 - nwfilterDriverLock(); - obj =3D nwfilterObjFromNWFilter(uuid); - nwfilterDriverUnlock(); + VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) { + obj =3D nwfilterObjFromNWFilter(uuid); + } =20 if (!obj) return NULL; @@ -449,13 +435,13 @@ static virNWFilterPtr nwfilterLookupByName(virConnectPtr conn, const char *name) { - virNWFilterObj *obj; + virNWFilterObj *obj =3D NULL; virNWFilterDef *def; virNWFilterPtr nwfilter =3D NULL; =20 - nwfilterDriverLock(); - obj =3D virNWFilterObjListFindByName(driver->nwfilters, name); - nwfilterDriverUnlock(); + VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) { + obj =3D virNWFilterObjListFindByName(driver->nwfilters, name); + } =20 if (!obj) { virReportError(VIR_ERR_NO_NWFILTER, @@ -491,16 +477,17 @@ nwfilterConnectListNWFilters(virConnectPtr conn, char **const names, int maxnames) { - int nnames; + int nnames =3D -1; =20 if (virConnectListNWFiltersEnsureACL(conn) < 0) return -1; =20 - nwfilterDriverLock(); - nnames =3D virNWFilterObjListGetNames(driver->nwfilters, conn, - virConnectListNWFiltersCheckACL, - names, maxnames); - nwfilterDriverUnlock(); + VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) { + nnames =3D virNWFilterObjListGetNames(driver->nwfilters, conn, + virConnectListNWFiltersCheckAC= L, + names, maxnames); + } + return nnames; } =20 @@ -510,17 +497,17 @@ nwfilterConnectListAllNWFilters(virConnectPtr conn, virNWFilterPtr **nwfilters, unsigned int flags) { - int ret; + int ret =3D -1; =20 virCheckFlags(0, -1); =20 if (virConnectListAllNWFiltersEnsureACL(conn) < 0) return -1; =20 - nwfilterDriverLock(); - ret =3D virNWFilterObjListExport(conn, driver->nwfilters, nwfilters, - virConnectListAllNWFiltersCheckACL); - nwfilterDriverUnlock(); + VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) { + ret =3D virNWFilterObjListExport(conn, driver->nwfilters, nwfilter= s, + virConnectListAllNWFiltersCheckACL); + } =20 return ret; } @@ -531,6 +518,7 @@ nwfilterDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags) { + VIR_LOCK_GUARD lock =3D virLockGuardLock(&driverMutex); virNWFilterDef *def; virNWFilterObj *obj =3D NULL; virNWFilterDef *objdef; @@ -545,7 +533,6 @@ nwfilterDefineXMLFlags(virConnectPtr conn, return NULL; } =20 - nwfilterDriverLock(); virNWFilterWriteLockFilterUpdates(); =20 if (!(def =3D virNWFilterDefParseString(xml, flags))) @@ -572,7 +559,6 @@ nwfilterDefineXMLFlags(virConnectPtr conn, virNWFilterObjUnlock(obj); =20 virNWFilterUnlockFilterUpdates(); - nwfilterDriverUnlock(); return nwfilter; } =20 @@ -588,11 +574,11 @@ nwfilterDefineXML(virConnectPtr conn, static int nwfilterUndefine(virNWFilterPtr nwfilter) { + VIR_LOCK_GUARD lock =3D virLockGuardLock(&driverMutex); virNWFilterObj *obj; virNWFilterDef *def; int ret =3D -1; =20 - nwfilterDriverLock(); virNWFilterWriteLockFilterUpdates(); =20 if (!(obj =3D nwfilterObjFromNWFilter(nwfilter->uuid))) @@ -621,7 +607,6 @@ nwfilterUndefine(virNWFilterPtr nwfilter) virNWFilterObjUnlock(obj); =20 virNWFilterUnlockFilterUpdates(); - nwfilterDriverUnlock(); return ret; } =20 @@ -630,15 +615,15 @@ static char * nwfilterGetXMLDesc(virNWFilterPtr nwfilter, unsigned int flags) { - virNWFilterObj *obj; + virNWFilterObj *obj =3D NULL; virNWFilterDef *def; char *ret =3D NULL; =20 virCheckFlags(0, NULL); =20 - nwfilterDriverLock(); - obj =3D nwfilterObjFromNWFilter(nwfilter->uuid); - nwfilterDriverUnlock(); + VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) { + obj =3D nwfilterObjFromNWFilter(nwfilter->uuid); + } =20 if (!obj) return NULL; --=20 2.31.1 From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468783; cv=none; d=zohomail.com; s=zohoarc; b=a/gn12R9zP3hHEEdiexepGD5xmtxstKFmU87xywrRAI5+Q5nbSOJBuFnAM3oNB2C7opywHRAx9NrRj8h1NCZlxdr/doe1eZ+zBUh4A/yf5lWnVJb+o8soiyviXWozXUFOZzVErG8oOqWGtjdc6UvO3N/5tV9oqN3Lc0glW7u4y8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468783; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7cwCuGB8sduY+yGIkb4VgiBXmhf4FNlSaN1KwHmJKig=; b=YD2etSkCq5+yhNbw4tPlS+xoDaPdAT+eGJwsvZQVHkNnaAQN6wWzuVI3IDeO3pJal8Kg+IXm3Kg87rM0IIMTIoDNjme0tR/ofOSJEpZKyRld91g52Tdm8zvb2ComeV8J0CheRutjT7uH1P+lUN6lj4nq94dlz6liRjmX+Wrc4Nk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 164746878315037.794096910503185; Wed, 16 Mar 2022 15:13:03 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-167-sjtIuJKuPy-GBY2ob5LpVQ-1; Wed, 16 Mar 2022 18:10:55 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id EED98805F7C; Wed, 16 Mar 2022 22:10:47 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id D94DD40FF40F; Wed, 16 Mar 2022 22:10:47 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 4B6C8193F510; Wed, 16 Mar 2022 22:10:47 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 39CDE1949761 for ; Wed, 16 Mar 2022 22:10:46 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 2AEACC44AEC; Wed, 16 Mar 2022 22:10:46 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id ABF8FC44AE5; Wed, 16 Mar 2022 22:10:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468782; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=7cwCuGB8sduY+yGIkb4VgiBXmhf4FNlSaN1KwHmJKig=; b=MXW/aFKBLEiNLd5YMs7remeWWs3RTiS+LfLTT410RK1e5RXpgneZjmSP+7PIiJADEtv7n8 IqDjvvJ4ExaGyTsvHln2O3V28ce6N6hSvtvSSkDeJ33ntmShheY/23LNoi9T3VT6NIrQWC XpRauQEIZVfI+kC+HcXMmQyGCYI13Tg= X-MC-Unique: sjtIuJKuPy-GBY2ob5LpVQ-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 04/13] nwfilter_gentech: Use automatic mutex management Date: Wed, 16 Mar 2022 23:10:33 +0100 Message-Id: <20220316221042.97147-5-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647468784737100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/nwfilter/nwfilter_gentech_driver.c | 33 +++++++++----------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 7bbf1e12fb..a8c0c6aa22 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -717,9 +717,7 @@ virNWFilterInstantiateFilterInternal(virNWFilterDriverS= tate *driver, bool *foundNewFilter) { int ifindex; - int rc; - - virMutexLock(&updateMutex); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&updateMutex); =20 /* after grabbing the filter update lock check for the interface; if it's not there anymore its filters will be or are being removed @@ -729,20 +727,14 @@ virNWFilterInstantiateFilterInternal(virNWFilterDrive= rState *driver, /* interfaces / VMs can disappear during filter instantiation; don't mark it as an error */ virResetLastError(); - rc =3D 0; - goto cleanup; + return 0; } =20 - rc =3D virNWFilterInstantiateFilterUpdate(driver, teardownOld, - binding, - ifindex, - useNewFilter, - false, foundNewFilter); - - cleanup: - virMutexUnlock(&updateMutex); - - return rc; + return virNWFilterInstantiateFilterUpdate(driver, teardownOld, + binding, + ifindex, + useNewFilter, + false, foundNewFilter); } =20 =20 @@ -753,9 +745,9 @@ virNWFilterInstantiateFilterLate(virNWFilterDriverState= *driver, { int rc; bool foundNewFilter =3D false; + VIR_LOCK_GUARD lock =3D virLockGuardLock(&updateMutex); =20 virNWFilterReadLockFilterUpdates(); - virMutexLock(&updateMutex); =20 rc =3D virNWFilterInstantiateFilterUpdate(driver, true, binding, ifindex, @@ -772,7 +764,6 @@ virNWFilterInstantiateFilterLate(virNWFilterDriverState= *driver, } =20 virNWFilterUnlockFilterUpdates(); - virMutexUnlock(&updateMutex); =20 return rc; } @@ -894,11 +885,9 @@ _virNWFilterTeardownFilter(const char *ifname) int virNWFilterTeardownFilter(virNWFilterBindingDef *binding) { - int ret; - virMutexLock(&updateMutex); - ret =3D _virNWFilterTeardownFilter(binding->portdevname); - virMutexUnlock(&updateMutex); - return ret; + VIR_LOCK_GUARD lock =3D virLockGuardLock(&updateMutex); + + return _virNWFilterTeardownFilter(binding->portdevname); } =20 enum { --=20 2.31.1 From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468654; cv=none; d=zohomail.com; s=zohoarc; b=SvBbRzPd6/5yNFqhfUJgRCsq/iSYLK5S7HDnXNMZx5SaiA2CrPrOjCmOb7/Bib572Z9pptShld2lWObmkUxLjKodpNGIiwWY/i6Q6agH3RPSRmd2UtHIJ0p26FphikPJ4U46S4AoJRlIvJfywBhW4OLti4o5s9XBSdASNRi5XD8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468654; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Y3ptNJVbRE00FUGKwPUi2fFu17PP7iwWPR0Je1O1wws=; b=ZGGYo7m/Y55HyNH3KVTPURJYkHbxLoIsW0wQuZclg80zXguZCRInZ4Wg/QmTGGR9aLjJq+t8OTmCIc/+eiFb2e4hYxlZ/9wZObrsqydSfWA30nwHNNKsqMIt0R6kh0N11kPjBp7XIyDX94XWaeXMOlu/63T9rMLX+ZDA0Y4xfK8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 16474686545589.397379331920774; Wed, 16 Mar 2022 15:10:54 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-190-in2dtQM1Oca0wACOMjVt3g-1; Wed, 16 Mar 2022 18:10:51 -0400 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BFEA12A2AD4A; Wed, 16 Mar 2022 22:10:48 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id AD38C468A4A; Wed, 16 Mar 2022 22:10:48 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 8C18E1949763; Wed, 16 Mar 2022 22:10:48 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id F22DE194E015 for ; Wed, 16 Mar 2022 22:10:46 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id D3BC2C44AE9; Wed, 16 Mar 2022 22:10:46 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6254EC44AE5; Wed, 16 Mar 2022 22:10:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468653; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=Y3ptNJVbRE00FUGKwPUi2fFu17PP7iwWPR0Je1O1wws=; b=TUDDJBHDgKTzxP5374kMx/Pmo15HG3SRi4chnnB8oOkk1uyHQ2zXXCViqRXDZEC+Mr9oim Dmo6aa7CR1Qe7SWHQn0R+9HJKlZZC1Lvh9F5aZLEl4JDwNAsTOzy0H/Jjcf7L/+EIKQE5A vHGOJylm7zWOhplskt0igbpGGqGs0gE= X-MC-Unique: in2dtQM1Oca0wACOMjVt3g-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 05/13] nwfilter_dhcpsnoop: Replace virNWFilterSnoopActiveLock macros Date: Wed, 16 Mar 2022 23:10:34 +0100 Message-Id: <20220316221042.97147-6-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.9 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647468674713100004 Content-Type: text/plain; charset="utf-8" Use automatic mutex management instead. Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/nwfilter/nwfilter_dhcpsnoop.c | 42 ++++++++----------------------- 1 file changed, 11 insertions(+), 31 deletions(-) diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcp= snoop.c index f8cffc7d57..c526653bc2 100644 --- a/src/nwfilter/nwfilter_dhcpsnoop.c +++ b/src/nwfilter/nwfilter_dhcpsnoop.c @@ -93,14 +93,6 @@ struct virNWFilterSnoopState { do { \ virMutexUnlock(&virNWFilterSnoopState.snoopLock); \ } while (0) -# define virNWFilterSnoopActiveLock() \ - do { \ - virMutexLock(&virNWFilterSnoopState.activeLock); \ - } while (0) -# define virNWFilterSnoopActiveUnlock() \ - do { \ - virMutexUnlock(&virNWFilterSnoopState.activeLock); \ - } while (0) =20 # define VIR_IFKEY_LEN ((VIR_UUID_STRING_BUFLEN) + (VIR_MAC_STRING_BUFLE= N)) =20 @@ -281,47 +273,35 @@ static char * virNWFilterSnoopActivate(virNWFilterSnoopReq *req) { g_autofree char *key =3D g_strdup_printf("%p-%d", req, req->ifindex); - char *ret =3D NULL; + VIR_LOCK_GUARD lock =3D virLockGuardLock(&virNWFilterSnoopState.active= Lock); =20 - virNWFilterSnoopActiveLock(); - - if (virHashAddEntry(virNWFilterSnoopState.active, key, (void *)0x1) = =3D=3D 0) - ret =3D g_steal_pointer(&key); - - virNWFilterSnoopActiveUnlock(); + if (virHashAddEntry(virNWFilterSnoopState.active, key, (void *)0x1) < = 0) + return NULL; =20 - return ret; + return g_steal_pointer(&key); } =20 static void virNWFilterSnoopCancel(char **threadKey) { + VIR_LOCK_GUARD lock =3D virLockGuardLock(&virNWFilterSnoopState.active= Lock); + if (*threadKey =3D=3D NULL) return; =20 - virNWFilterSnoopActiveLock(); - ignore_value(virHashRemoveEntry(virNWFilterSnoopState.active, *threadK= ey)); g_clear_pointer(threadKey, g_free); - - virNWFilterSnoopActiveUnlock(); } =20 static bool virNWFilterSnoopIsActive(char *threadKey) { - void *entry; + VIR_LOCK_GUARD lock =3D virLockGuardLock(&virNWFilterSnoopState.active= Lock); =20 if (threadKey =3D=3D NULL) return false; =20 - virNWFilterSnoopActiveLock(); - - entry =3D virHashLookup(virNWFilterSnoopState.active, threadKey); - - virNWFilterSnoopActiveUnlock(); - - return entry !=3D NULL; + return virHashLookup(virNWFilterSnoopState.active, threadKey) !=3D NUL= L; } =20 /* @@ -2083,9 +2063,9 @@ virNWFilterDHCPSnoopShutdown(void) =20 virNWFilterSnoopUnlock(); =20 - virNWFilterSnoopActiveLock(); - g_clear_pointer(&virNWFilterSnoopState.active, g_hash_table_unref); - virNWFilterSnoopActiveUnlock(); + VIR_WITH_MUTEX_LOCK_GUARD(&virNWFilterSnoopState.activeLock) { + g_clear_pointer(&virNWFilterSnoopState.active, g_hash_table_unref); + } } =20 #else /* WITH_LIBPCAP */ --=20 2.31.1 From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468671; cv=none; d=zohomail.com; s=zohoarc; b=aRqJIYdt8uBIRbJZI4NEzn833xRCa5PhDQ0qsRUgML6BcI07Ms9AOXJloUEOmV0IbBI20gOqrWnXlCVpIX5DCuSV7DouxqCYr93Bq33e+htlrERqJJJ1UHSchV8esaYGcsVjmFHQI5JuHnT7NM3hFyzCP8+NblGQNc5XRrSaIfU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468671; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=8rWsuR1MDsJD4msQMcptl9ZGibs+wUSC5eSb9j9ecKI=; b=R15wmrFf98qDXr6bedwflYUPmubZI+kEBgDpIvhESsU/P/62/vEQ+eO8FqD89p1iQoNL0R5y7hqGXBHCIA5LYHNPRZAfkxHM45WOPXW8afJ6ThRmUDicI3UJ5KddTMRbmC5jcIf08geATxaguEfDcMq9bNyLDX0Xd43gOgRYWIc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1647468671695582.2917861391128; Wed, 16 Mar 2022 15:11:11 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-356-HWqlj-H0OB2f0L-rMTXm6A-1; Wed, 16 Mar 2022 18:10:53 -0400 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4A32B106656A; Wed, 16 Mar 2022 22:10:49 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 362484679F3; Wed, 16 Mar 2022 22:10:49 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id D96CB1953560; Wed, 16 Mar 2022 22:10:48 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 963851949763 for ; Wed, 16 Mar 2022 22:10:47 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 8B6F1C44AE8; Wed, 16 Mar 2022 22:10:47 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id 18BC6C44AE5; Wed, 16 Mar 2022 22:10:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468670; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=8rWsuR1MDsJD4msQMcptl9ZGibs+wUSC5eSb9j9ecKI=; b=bRmxZBC219NPZKVQt6MfaFCpj9l5s3Elh7TKaaRBNT5+anlRfwEKXDCVPl+Pl50US9VeD7 rRFev/cahFGgCU6J/3k+Ej56bNNAy0kSR4EJJvjBUdjKnockNBOdAmm/S/boj56sBLlkyV x2E3YoqnY2amXRBaqF4Px4Fvw6WmEUo= X-MC-Unique: HWqlj-H0OB2f0L-rMTXm6A-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 06/13] nwfilter_dhcpsnoop: Replace virNWFilterSnoopLock macros Date: Wed, 16 Mar 2022 23:10:35 +0100 Message-Id: <20220316221042.97147-7-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.9 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647468673709100001 Content-Type: text/plain; charset="utf-8" Use automatic mutex management instead. Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/nwfilter/nwfilter_dhcpsnoop.c | 89 +++++++++++-------------------- 1 file changed, 30 insertions(+), 59 deletions(-) diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcp= snoop.c index c526653bc2..f33db02f44 100644 --- a/src/nwfilter/nwfilter_dhcpsnoop.c +++ b/src/nwfilter/nwfilter_dhcpsnoop.c @@ -85,15 +85,6 @@ struct virNWFilterSnoopState { virMutex activeLock; /* protects Active */ }; =20 -# define virNWFilterSnoopLock() \ - do { \ - virMutexLock(&virNWFilterSnoopState.snoopLock); \ - } while (0) -# define virNWFilterSnoopUnlock() \ - do { \ - virMutexUnlock(&virNWFilterSnoopState.snoopLock); \ - } while (0) - # define VIR_IFKEY_LEN ((VIR_UUID_STRING_BUFLEN) + (VIR_MAC_STRING_BUFLE= N)) =20 typedef struct _virNWFilterSnoopReq virNWFilterSnoopReq; @@ -147,7 +138,7 @@ struct _virNWFilterSnoopReq { =20 /* * Note about lock-order: - * 1st: virNWFilterSnoopLock() + * 1st: virNWFilterSnoopState.snoopLock * 2nd: virNWFilterSnoopReqLock(req) * * Rationale: Former protects the SnoopReqs hash, latter its contents @@ -620,16 +611,13 @@ virNWFilterSnoopReqRelease(void *req0) static virNWFilterSnoopReq * virNWFilterSnoopReqGetByIFKey(const char *ifkey) { + VIR_LOCK_GUARD lock =3D virLockGuardLock(&virNWFilterSnoopState.snoopL= ock); virNWFilterSnoopReq *req; =20 - virNWFilterSnoopLock(); - req =3D virHashLookup(virNWFilterSnoopState.snoopReqs, ifkey); if (req) virNWFilterSnoopReqGet(req); =20 - virNWFilterSnoopUnlock(); - return req; } =20 @@ -640,11 +628,11 @@ virNWFilterSnoopReqGetByIFKey(const char *ifkey) static void virNWFilterSnoopReqPut(virNWFilterSnoopReq *req) { + VIR_LOCK_GUARD lock =3D virLockGuardLock(&virNWFilterSnoopState.snoopL= ock); + if (!req) return; =20 - virNWFilterSnoopLock(); - if (!!g_atomic_int_dec_and_test(&req->refctr)) { /* * delete the request: @@ -660,8 +648,6 @@ virNWFilterSnoopReqPut(virNWFilterSnoopReq *req) req->ifkey)); } } - - virNWFilterSnoopUnlock(); } =20 /* @@ -1460,20 +1446,19 @@ virNWFilterDHCPSnoopThread(void *req0) } /* while (!error) */ =20 /* protect IfNameToKey */ - virNWFilterSnoopLock(); - - /* protect req->binding->portdevname & req->threadkey */ - virNWFilterSnoopReqLock(req); + VIR_WITH_MUTEX_LOCK_GUARD(&virNWFilterSnoopState.snoopLock) { + /* protect req->binding->portdevname & req->threadkey */ + virNWFilterSnoopReqLock(req); =20 - virNWFilterSnoopCancel(&req->threadkey); + virNWFilterSnoopCancel(&req->threadkey); =20 - ignore_value(virHashRemoveEntry(virNWFilterSnoopState.ifnameToKey, - req->binding->portdevname)); + ignore_value(virHashRemoveEntry(virNWFilterSnoopState.ifnameToKey, + req->binding->portdevname)); =20 - g_clear_pointer(&req->binding->portdevname, g_free); + g_clear_pointer(&req->binding->portdevname, g_free); =20 - virNWFilterSnoopReqUnlock(req); - virNWFilterSnoopUnlock(); + virNWFilterSnoopReqUnlock(req); + } =20 cleanup: virThreadPoolFree(worker); @@ -1556,7 +1541,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, goto exit_snoopreqput; } =20 - virNWFilterSnoopLock(); + virMutexLock(&virNWFilterSnoopState.snoopLock); =20 if (virHashAddEntry(virNWFilterSnoopState.ifnameToKey, req->binding->portdevname, @@ -1621,7 +1606,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, =20 virNWFilterSnoopReqUnlock(req); =20 - virNWFilterSnoopUnlock(); + virMutexUnlock(&virNWFilterSnoopState.snoopLock); =20 /* do not 'put' the req -- the thread will do this */ =20 @@ -1634,7 +1619,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, exit_rem_ifnametokey: virHashRemoveEntry(virNWFilterSnoopState.ifnameToKey, binding->portdev= name); exit_snoopunlock: - virNWFilterSnoopUnlock(); + virMutexUnlock(&virNWFilterSnoopState.snoopLock); exit_snoopreqput: if (!threadPuts) virNWFilterSnoopReqPut(req); @@ -1695,23 +1680,19 @@ virNWFilterSnoopLeaseFileWrite(int lfd, const char = *ifkey, static void virNWFilterSnoopLeaseFileSave(virNWFilterSnoopIPLease *ipl) { + VIR_LOCK_GUARD lock =3D virLockGuardLock(&virNWFilterSnoopState.snoopL= ock); virNWFilterSnoopReq *req =3D ipl->snoopReq; =20 - virNWFilterSnoopLock(); - if (virNWFilterSnoopState.leaseFD < 0) virNWFilterSnoopLeaseFileOpen(); if (virNWFilterSnoopLeaseFileWrite(virNWFilterSnoopState.leaseFD, req->ifkey, ipl) < 0) - goto error; + return; =20 /* keep dead leases at < ~95% of file size */ if (g_atomic_int_add(&virNWFilterSnoopState.wLeases, 1) >=3D g_atomic_int_get(&virNWFilterSnoopState.nLeases) * 20) virNWFilterSnoopLeaseFileLoad(); /* load & refresh lease file */ - - error: - virNWFilterSnoopUnlock(); } =20 /* @@ -1830,9 +1811,7 @@ virNWFilterSnoopLeaseFileLoad(void) time_t now; FILE *fp; int ln =3D 0, tmp; - - /* protect the lease file */ - virNWFilterSnoopLock(); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&virNWFilterSnoopState.snoopL= ock); =20 fp =3D fopen(LEASEFILE, "r"); time(&now); @@ -1892,8 +1871,6 @@ virNWFilterSnoopLeaseFileLoad(void) VIR_FORCE_FCLOSE(fp); =20 virNWFilterSnoopLeaseFileRefresh(); - - virNWFilterSnoopUnlock(); } =20 /* @@ -1953,11 +1930,11 @@ virNWFilterSnoopRemAllReqIter(const void *payload, static void virNWFilterSnoopEndThreads(void) { - virNWFilterSnoopLock(); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&virNWFilterSnoopState.snoopL= ock); + virHashRemoveSet(virNWFilterSnoopState.snoopReqs, virNWFilterSnoopRemAllReqIter, NULL); - virNWFilterSnoopUnlock(); } =20 int @@ -1996,18 +1973,17 @@ virNWFilterDHCPSnoopInit(void) void virNWFilterDHCPSnoopEnd(const char *ifname) { + VIR_LOCK_GUARD lock =3D virLockGuardLock(&virNWFilterSnoopState.snoopL= ock); char *ifkey =3D NULL; =20 - virNWFilterSnoopLock(); - if (!virNWFilterSnoopState.snoopReqs) - goto cleanup; + return; =20 if (ifname) { ifkey =3D (char *)virHashLookup(virNWFilterSnoopState.ifnameToKey, ifname); if (!ifkey) - goto cleanup; + return; =20 ignore_value(virHashRemoveEntry(virNWFilterSnoopState.ifnameToKey, ifname)); @@ -2020,7 +1996,7 @@ virNWFilterDHCPSnoopEnd(const char *ifname) if (!req) { virReportError(VIR_ERR_INTERNAL_ERROR, _("ifkey \"%s\" has no req"), ifkey); - goto cleanup; + return; } =20 /* protect req->binding->portdevname & req->threadkey */ @@ -2044,9 +2020,6 @@ virNWFilterDHCPSnoopEnd(const char *ifname) =20 virNWFilterSnoopLeaseFileLoad(); } - - cleanup: - virNWFilterSnoopUnlock(); } =20 void @@ -2055,13 +2028,11 @@ virNWFilterDHCPSnoopShutdown(void) virNWFilterSnoopEndThreads(); virNWFilterSnoopJoinThreads(); =20 - virNWFilterSnoopLock(); - - virNWFilterSnoopLeaseFileClose(); - g_clear_pointer(&virNWFilterSnoopState.ifnameToKey, g_hash_table_unref= ); - g_clear_pointer(&virNWFilterSnoopState.snoopReqs, g_hash_table_unref); - - virNWFilterSnoopUnlock(); + VIR_WITH_MUTEX_LOCK_GUARD(&virNWFilterSnoopState.snoopLock) { + virNWFilterSnoopLeaseFileClose(); + g_clear_pointer(&virNWFilterSnoopState.ifnameToKey, g_hash_table_u= nref); + g_clear_pointer(&virNWFilterSnoopState.snoopReqs, g_hash_table_unr= ef); + } =20 VIR_WITH_MUTEX_LOCK_GUARD(&virNWFilterSnoopState.activeLock) { g_clear_pointer(&virNWFilterSnoopState.active, g_hash_table_unref); --=20 2.31.1 From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468657; cv=none; d=zohomail.com; s=zohoarc; b=lbBoJXPtco/I0ld8+HIafqQJG1lU/Oqh+2wNViaOY+FKqkVstf1VJTE/XOF/t/mrT44PwGP+wGUVFo/Kkp2Vu2NUNHwlMAE8Ipn+sHMn8DBhJfUFx+qAjHh2Fq53WFx67Pg1OvSL5yd0WNdYpPznUs7FVCDmKE92FmhsXfR1+EY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468657; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=vE3Jwvcay4scQ/ILy8kpUSiN3GoT22NGSSgGtr763yU=; b=YlNNvXuciNLV9IX+FD09SEH3n9ChoVVacqNl79HMHdqyg2j+vshbVkMhTJegc1COv6kdyzYq0OTXcSwim+GJDE6nwW4M9fPPEbS2AmFEx3VqgEIA/NPJKv2tNslY1nDm+WOXPX3MODK7zefAezB+Ac/vh3RGNleVbTA7QXZbhXM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 164746865699523.20435379435139; Wed, 16 Mar 2022 15:10:56 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-438-uzH1scqQMgSq6E4V8Fr9kg-1; Wed, 16 Mar 2022 18:10:53 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 17D6118A65A0; Wed, 16 Mar 2022 22:10:50 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id F09F540FF413; Wed, 16 Mar 2022 22:10:49 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id C2773194034E; Wed, 16 Mar 2022 22:10:49 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 6AAD11949761 for ; Wed, 16 Mar 2022 22:10:48 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 5CE43C44AEA; Wed, 16 Mar 2022 22:10:48 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id C42BEC44AE7; Wed, 16 Mar 2022 22:10:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468657; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=vE3Jwvcay4scQ/ILy8kpUSiN3GoT22NGSSgGtr763yU=; b=CILsd3EI1ZUno3TuC5kxCWiqxKf4Gxs8RBondHFEyxjFzy3kcjoSQvTQ1Fib+Z91Bcs5OC KWv1s9543Uhho4zfYHeqGsRafVnDzHadUGKLO1mHkeM0R5Q6wFpIDWNtbpQiV155TtvBsM a/pncYiHvQy0xuO7K5aHAQb7OGiV82g= X-MC-Unique: uzH1scqQMgSq6E4V8Fr9kg-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 07/13] nwfilter_dhcpsnoop: Replace virNWFilterSnoopReqLock functions Date: Wed, 16 Mar 2022 23:10:36 +0100 Message-Id: <20220316221042.97147-8-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647468674755100005 Content-Type: text/plain; charset="utf-8" Use automatic mutex management instead. Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/nwfilter/nwfilter_dhcpsnoop.c | 277 ++++++++++-------------------- 1 file changed, 95 insertions(+), 182 deletions(-) diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcp= snoop.c index f33db02f44..852840c209 100644 --- a/src/nwfilter/nwfilter_dhcpsnoop.c +++ b/src/nwfilter/nwfilter_dhcpsnoop.c @@ -139,7 +139,7 @@ struct _virNWFilterSnoopReq { /* * Note about lock-order: * 1st: virNWFilterSnoopState.snoopLock - * 2nd: virNWFilterSnoopReqLock(req) + * 2nd: &req->lock * * Rationale: Former protects the SnoopReqs hash, latter its contents */ @@ -246,9 +246,6 @@ static int virNWFilterSnoopReqLeaseDel(virNWFilterSnoop= Req *req, bool update_leasefile, bool instantiate); =20 -static void virNWFilterSnoopReqLock(virNWFilterSnoopReq *req); -static void virNWFilterSnoopReqUnlock(virNWFilterSnoopReq *req); - static void virNWFilterSnoopLeaseFileLoad(void); static void virNWFilterSnoopLeaseFileSave(virNWFilterSnoopIPLease *ipl); =20 @@ -362,11 +359,9 @@ virNWFilterSnoopIPLeaseTimerAdd(virNWFilterSnoopIPLeas= e *plnew) virNWFilterSnoopReq *req =3D plnew->snoopReq; =20 /* protect req->start / req->end */ - virNWFilterSnoopReqLock(req); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&req->lock); =20 virNWFilterSnoopListAdd(plnew, &req->start, &req->end); - - virNWFilterSnoopReqUnlock(req); } =20 /* @@ -378,12 +373,9 @@ virNWFilterSnoopIPLeaseTimerDel(virNWFilterSnoopIPLeas= e *ipl) virNWFilterSnoopReq *req =3D ipl->snoopReq; =20 /* protect req->start / req->end */ - virNWFilterSnoopReqLock(req); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&req->lock); =20 virNWFilterSnoopListDel(ipl, &req->start, &req->end); - - virNWFilterSnoopReqUnlock(req); - ipl->timeout =3D 0; } =20 @@ -401,36 +393,24 @@ virNWFilterSnoopIPLeaseInstallRule(virNWFilterSnoopIP= Lease *ipl, bool instantiate) { g_autofree char *ipaddr =3D virSocketAddrFormat(&ipl->ipAddress); - int rc =3D -1; - virNWFilterSnoopReq *req; + virNWFilterSnoopReq *req =3D ipl->snoopReq; + VIR_LOCK_GUARD lock =3D virLockGuardLock(&req->lock); =20 if (!ipaddr) return -1; =20 - req =3D ipl->snoopReq; - - /* protect req->binding->portdevname */ - virNWFilterSnoopReqLock(req); - if (virNWFilterIPAddrMapAddIPAddr(req->binding->portdevname, ipaddr) <= 0) - goto cleanup; + return -1; =20 - if (!instantiate) { - rc =3D 0; - goto cleanup; - } + if (!instantiate) + return 0; =20 /* instantiate the filters */ =20 - if (req->binding->portdevname) { - rc =3D virNWFilterInstantiateFilterLate(req->driver, - req->binding, - req->ifindex); - } + if (!req->binding->portdevname) + return -1; =20 - cleanup: - virNWFilterSnoopReqUnlock(req); - return rc; + return virNWFilterInstantiateFilterLate(req->driver, req->binding, req= ->ifindex); } =20 /* @@ -473,7 +453,7 @@ virNWFilterSnoopReqLeaseTimerRun(virNWFilterSnoopReq *r= eq) bool is_last =3D false; =20 /* protect req->start */ - virNWFilterSnoopReqLock(req); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&req->lock); =20 while (req->start && req->start->timeout <=3D now) { if (req->start->next =3D=3D NULL || @@ -483,8 +463,6 @@ virNWFilterSnoopReqLeaseTimerRun(virNWFilterSnoopReq *r= eq) is_last); } =20 - virNWFilterSnoopReqUnlock(req); - return 0; } =20 @@ -562,24 +540,6 @@ virNWFilterSnoopReqFree(virNWFilterSnoopReq *req) g_free(req); } =20 -/* - * Lock a Snoop request 'req' - */ -static void -virNWFilterSnoopReqLock(virNWFilterSnoopReq *req) -{ - virMutexLock(&req->lock); -} - -/* - * Unlock a Snoop request 'req' - */ -static void -virNWFilterSnoopReqUnlock(virNWFilterSnoopReq *req) -{ - virMutexUnlock(&req->lock); -} - /* * virNWFilterSnoopReqRelease - hash table free function to kill a request */ @@ -592,12 +552,10 @@ virNWFilterSnoopReqRelease(void *req0) return; =20 /* protect req->threadkey */ - virNWFilterSnoopReqLock(req); - - if (req->threadkey) - virNWFilterSnoopCancel(&req->threadkey); - - virNWFilterSnoopReqUnlock(req); + VIR_WITH_MUTEX_LOCK_GUARD(&req->lock) { + if (req->threadkey) + virNWFilterSnoopCancel(&req->threadkey); + } =20 virNWFilterSnoopReqFree(req); } @@ -658,45 +616,33 @@ virNWFilterSnoopReqLeaseAdd(virNWFilterSnoopReq *req, virNWFilterSnoopIPLease *plnew, bool update_leasefile) { + VIR_LOCK_GUARD lock =3D virLockGuardLock(&req->lock); virNWFilterSnoopIPLease *pl; =20 plnew->snoopReq =3D req; =20 - /* protect req->start and the lease */ - virNWFilterSnoopReqLock(req); - pl =3D virNWFilterSnoopIPLeaseGetByIP(req->start, &plnew->ipAddress); =20 if (pl) { virNWFilterSnoopIPLeaseUpdate(pl, plnew->timeout); + virLockGuardUnlock(&lock); + } else { + pl =3D g_new0(virNWFilterSnoopIPLease, 1); + *pl =3D *plnew; =20 - virNWFilterSnoopReqUnlock(req); - - goto cleanup; - } - - virNWFilterSnoopReqUnlock(req); + if (req->threadkey && virNWFilterSnoopIPLeaseInstallRule(pl, true)= < 0) { + g_free(pl); + return -1; + } =20 - pl =3D g_new0(virNWFilterSnoopIPLease, 1); - *pl =3D *plnew; + virLockGuardUnlock(&lock); =20 - /* protect req->threadkey */ - virNWFilterSnoopReqLock(req); + /* put the lease on the req's list */ + virNWFilterSnoopIPLeaseTimerAdd(pl); =20 - if (req->threadkey && virNWFilterSnoopIPLeaseInstallRule(pl, true) < 0= ) { - virNWFilterSnoopReqUnlock(req); - g_free(pl); - return -1; + g_atomic_int_add(&virNWFilterSnoopState.nLeases, 1); } =20 - virNWFilterSnoopReqUnlock(req); - - /* put the lease on the req's list */ - virNWFilterSnoopIPLeaseTimerAdd(pl); - - g_atomic_int_add(&virNWFilterSnoopState.nLeases, 1); - - cleanup: if (update_leasefile) virNWFilterSnoopLeaseFileSave(pl); =20 @@ -710,24 +656,19 @@ virNWFilterSnoopReqLeaseAdd(virNWFilterSnoopReq *req, static int virNWFilterSnoopReqRestore(virNWFilterSnoopReq *req) { - int ret =3D 0; virNWFilterSnoopIPLease *ipl; =20 /* protect req->start */ - virNWFilterSnoopReqLock(req); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&req->lock); =20 for (ipl =3D req->start; ipl; ipl =3D ipl->next) { /* instantiate the rules at the last lease */ bool is_last =3D (ipl->next =3D=3D NULL); - if (virNWFilterSnoopIPLeaseInstallRule(ipl, is_last) < 0) { - ret =3D -1; - break; - } + if (virNWFilterSnoopIPLeaseInstallRule(ipl, is_last) < 0) + return -1; } =20 - virNWFilterSnoopReqUnlock(req); - - return ret; + return 0; } =20 /* @@ -759,16 +700,15 @@ virNWFilterSnoopReqLeaseDel(virNWFilterSnoopReq *req, g_autofree char *ipstr =3D NULL; =20 /* protect req->start, req->ifname and the lease */ - virNWFilterSnoopReqLock(req); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&req->lock); =20 ipl =3D virNWFilterSnoopIPLeaseGetByIP(req->start, ipaddr); if (ipl =3D=3D NULL) - goto lease_not_found; + return 0; =20 ipstr =3D virSocketAddrFormat(&ipl->ipAddress); if (!ipstr) { - ret =3D -1; - goto lease_not_found; + return -1; } =20 virNWFilterSnoopIPLeaseTimerDel(ipl); @@ -807,10 +747,6 @@ virNWFilterSnoopReqLeaseDel(virNWFilterSnoopReq *req, g_free(ipl); =20 ignore_value(!!g_atomic_int_dec_and_test(&virNWFilterSnoopState.nLease= s)); - - lease_not_found: - virNWFilterSnoopReqUnlock(req); - return ret; } =20 @@ -1279,42 +1215,36 @@ virNWFilterDHCPSnoopThread(void *req0) /* whoever started us increased the reference counter for the req for = us */ =20 /* protect req->binding->portdevname & req->threadkey */ - virNWFilterSnoopReqLock(req); - - if (req->binding->portdevname && req->threadkey) { - for (i =3D 0; i < G_N_ELEMENTS(pcapConf); i++) { - pcapConf[i].handle =3D - virNWFilterSnoopDHCPOpen(req->binding->portdevname, - &req->binding->mac, - pcapConf[i].filter, - pcapConf[i].dir); - if (!pcapConf[i].handle) { - error =3D true; - break; + VIR_WITH_MUTEX_LOCK_GUARD(&req->lock) { + if (req->binding->portdevname && req->threadkey) { + for (i =3D 0; i < G_N_ELEMENTS(pcapConf); i++) { + pcapConf[i].handle =3D + virNWFilterSnoopDHCPOpen(req->binding->portdevname, + &req->binding->mac, + pcapConf[i].filter, + pcapConf[i].dir); + if (!pcapConf[i].handle) { + error =3D true; + break; + } + fds[i].fd =3D pcap_fileno(pcapConf[i].handle); } - fds[i].fd =3D pcap_fileno(pcapConf[i].handle); + tmp =3D virNetDevGetIndex(req->binding->portdevname, &ifindex); + threadkey =3D g_strdup(req->threadkey); + worker =3D virThreadPoolNewFull(1, 1, 0, virNWFilterDHCPDecode= Worker, + "dhcp-decode", NULL, req); } - tmp =3D virNetDevGetIndex(req->binding->portdevname, &ifindex); - threadkey =3D g_strdup(req->threadkey); - worker =3D virThreadPoolNewFull(1, 1, 0, - virNWFilterDHCPDecodeWorker, - "dhcp-decode", - NULL, - req); - } - - /* let creator know how well we initialized */ - if (error || !threadkey || tmp < 0 || !worker || - ifindex !=3D req->ifindex) { - virErrorPreserveLast(&req->threadError); - req->threadStatus =3D THREAD_STATUS_FAIL; - } else { - req->threadStatus =3D THREAD_STATUS_OK; - } =20 - virCondSignal(&req->threadStatusCond); + /* let creator know how well we initialized */ + if (error || !threadkey || tmp < 0 || !worker || ifindex !=3D req-= >ifindex) { + virErrorPreserveLast(&req->threadError); + req->threadStatus =3D THREAD_STATUS_FAIL; + } else { + req->threadStatus =3D THREAD_STATUS_OK; + } =20 - virNWFilterSnoopReqUnlock(req); + virCondSignal(&req->threadStatusCond); + } =20 if (req->threadStatus !=3D THREAD_STATUS_OK) goto cleanup; @@ -1362,12 +1292,10 @@ virNWFilterDHCPSnoopThread(void *req0) tmp =3D -1; =20 /* protect req->binding->portdevname */ - virNWFilterSnoopReqLock(req); - - if (req->binding->portdevname) - tmp =3D virNetDevValidateConfig(req->binding->portdevn= ame, NULL, ifindex); - - virNWFilterSnoopReqUnlock(req); + VIR_WITH_MUTEX_LOCK_GUARD(&req->lock) { + if (req->binding->portdevname) + tmp =3D virNetDevValidateConfig(req->binding->port= devname, NULL, ifindex); + } =20 if (tmp <=3D 0) { error =3D true; @@ -1378,20 +1306,17 @@ virNWFilterDHCPSnoopThread(void *req0) g_clear_pointer(&pcapConf[i].handle, pcap_close); =20 /* protect req->binding->portdevname */ - virNWFilterSnoopReqLock(req); - - virReportError(VIR_ERR_INTERNAL_ERROR, - _("interface '%s' failing; " - "reopening"), - req->binding->portdevname); - if (req->binding->portdevname) - pcapConf[i].handle =3D - virNWFilterSnoopDHCPOpen(req->binding->portdev= name, - &req->binding->mac, - pcapConf[i].filter, - pcapConf[i].dir); - - virNWFilterSnoopReqUnlock(req); + VIR_WITH_MUTEX_LOCK_GUARD(&req->lock) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("interface '%s' failing; reopenin= g"), + req->binding->portdevname); + if (req->binding->portdevname) + pcapConf[i].handle =3D + virNWFilterSnoopDHCPOpen(req->binding->por= tdevname, + &req->binding->ma= c, + pcapConf[i].filte= r, + pcapConf[i].dir); + } =20 if (!pcapConf[i].handle) { error =3D true; @@ -1448,16 +1373,14 @@ virNWFilterDHCPSnoopThread(void *req0) /* protect IfNameToKey */ VIR_WITH_MUTEX_LOCK_GUARD(&virNWFilterSnoopState.snoopLock) { /* protect req->binding->portdevname & req->threadkey */ - virNWFilterSnoopReqLock(req); - - virNWFilterSnoopCancel(&req->threadkey); - - ignore_value(virHashRemoveEntry(virNWFilterSnoopState.ifnameToKey, - req->binding->portdevname)); + VIR_WITH_MUTEX_LOCK_GUARD(&req->lock) { + virNWFilterSnoopCancel(&req->threadkey); =20 - g_clear_pointer(&req->binding->portdevname, g_free); + ignore_value(virHashRemoveEntry(virNWFilterSnoopState.ifnameTo= Key, + req->binding->portdevname)); =20 - virNWFilterSnoopReqUnlock(req); + g_clear_pointer(&req->binding->portdevname, g_free); + } } =20 cleanup: @@ -1563,7 +1486,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, } =20 /* prevent thread from holding req */ - virNWFilterSnoopReqLock(req); + virMutexLock(&req->lock); =20 if (virThreadCreateFull(&thread, false, virNWFilterDHCPSnoopThread, "dhcp-snoop", false, req) !=3D 0) { @@ -1604,7 +1527,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, goto exit_snoop_cancel; } =20 - virNWFilterSnoopReqUnlock(req); + virMutexUnlock(&req->lock); =20 virMutexUnlock(&virNWFilterSnoopState.snoopLock); =20 @@ -1615,7 +1538,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, exit_snoop_cancel: virNWFilterSnoopCancel(&req->threadkey); exit_snoopreq_unlock: - virNWFilterSnoopReqUnlock(req); + virMutexUnlock(&req->lock); exit_rem_ifnametokey: virHashRemoveEntry(virNWFilterSnoopState.ifnameToKey, binding->portdev= name); exit_snoopunlock: @@ -1706,12 +1629,11 @@ virNWFilterSnoopPruneIter(const void *payload, const void *data G_GNUC_UNUSED) { virNWFilterSnoopReq *req =3D (virNWFilterSnoopReq *)payload; - bool del_req; =20 /* clean up orphaned, expired leases */ =20 /* protect req->threadkey */ - virNWFilterSnoopReqLock(req); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&req->lock); =20 if (!req->threadkey) virNWFilterSnoopReqLeaseTimerRun(req); @@ -1719,11 +1641,7 @@ virNWFilterSnoopPruneIter(const void *payload, /* * have the entry removed if it has no leases and no one holds a ref */ - del_req =3D ((req->start =3D=3D NULL) && (g_atomic_int_get(&req->refct= r) =3D=3D 0)); - - virNWFilterSnoopReqUnlock(req); - - return del_req; + return ((req->start =3D=3D NULL) && (g_atomic_int_get(&req->refctr) = =3D=3D 0)); } =20 /* @@ -1740,12 +1658,11 @@ virNWFilterSnoopSaveIter(void *payload, virNWFilterSnoopIPLease *ipl; =20 /* protect req->start */ - virNWFilterSnoopReqLock(req); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&req->lock); =20 for (ipl =3D req->start; ipl; ipl =3D ipl->next) ignore_value(virNWFilterSnoopLeaseFileWrite(tfd, req->ifkey, ipl)); =20 - virNWFilterSnoopReqUnlock(req); return 0; } =20 @@ -1901,7 +1818,7 @@ virNWFilterSnoopRemAllReqIter(const void *payload, virNWFilterSnoopReq *req =3D (virNWFilterSnoopReq *)payload; =20 /* protect req->binding->portdevname */ - virNWFilterSnoopReqLock(req); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&req->lock); =20 if (req->binding && req->binding->portdevname) { ignore_value(virHashRemoveEntry(virNWFilterSnoopState.ifnameToKey, @@ -1917,8 +1834,6 @@ virNWFilterSnoopRemAllReqIter(const void *payload, g_clear_pointer(&req->binding->portdevname, g_free); } =20 - virNWFilterSnoopReqUnlock(req); - /* removal will call virNWFilterSnoopCancel() */ return 1; } @@ -2000,14 +1915,12 @@ virNWFilterDHCPSnoopEnd(const char *ifname) } =20 /* protect req->binding->portdevname & req->threadkey */ - virNWFilterSnoopReqLock(req); - - /* keep valid lease req; drop interface association */ - virNWFilterSnoopCancel(&req->threadkey); + VIR_WITH_MUTEX_LOCK_GUARD(&req->lock) { + /* keep valid lease req; drop interface association */ + virNWFilterSnoopCancel(&req->threadkey); =20 - g_clear_pointer(&req->binding->portdevname, g_free); - - virNWFilterSnoopReqUnlock(req); + g_clear_pointer(&req->binding->portdevname, g_free); + } =20 virNWFilterSnoopReqPut(req); } else { /* free all of them */ --=20 2.31.1 From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468657; cv=none; d=zohomail.com; s=zohoarc; b=RwZYhQ0bwfm4DOyg1TLsLKtdZ4Lf0ERvQUAsm16dcrZWYnMU0/pPLfWIxnZllKd+7L3tF0iVqfkfYB8ZJQInhdBdOotjuVWTlf2N0kCX1VZPfkHDQPinTvlxpn5U6wPrf6npU6Um44FDYihHFOZoAGfw/hl3K1WmM6HzFvPxDEo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468657; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=kG51eJUGKltd1nUk/gjQCDpuFjrcXSvC2XCHJiVE/lM=; b=cyJ265fzcB0EezM7ek7UnMzo/riCKIGOxZNuc1gt+NX6yrbX5oHGVGjCVAJvMuuMSACwq05F36oLe/Rph25bL9JRicrsEhNKaq1UKvwQXxFO+WwolU6dPtBwAvt5+rduBrt++9WHb5o5TunnwA76+f4eqDA3XcDlxDscHRFOb+Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1647468657458405.13681082118694; Wed, 16 Mar 2022 15:10:57 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-130-HNCJ-2BYOLqwbYLM3aU-NQ-1; Wed, 16 Mar 2022 18:10:54 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 685AD18A659A; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 53F6AC44AE5; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 1FA27193F510; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 2E3F9194E015 for ; Wed, 16 Mar 2022 22:10:49 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 11109C44AEA; Wed, 16 Mar 2022 22:10:49 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9421AC44AE7; Wed, 16 Mar 2022 22:10:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468656; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=kG51eJUGKltd1nUk/gjQCDpuFjrcXSvC2XCHJiVE/lM=; b=dWWPozaz/nJEj7sOvSE7ZjZtx5KM4OSOVtWksB7ioitoqUJfmortSeKIM4Y5hmLRdJSbIQ UjAhrk3EBz2F/jura35hd3kp9aLO6VORew0OrR+ZZFjXX4rC8GPlxFB5m+FbeP6Vs51q7z xNwNc0+fwJQAoQO9yyLl5z3QcvN8D1Q= X-MC-Unique: HNCJ-2BYOLqwbYLM3aU-NQ-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 08/13] nwfilter_learnipaddr: Use automatic mutex management Date: Wed, 16 Mar 2022 23:10:37 +0100 Message-Id: <20220316221042.97147-9-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647468659572100002 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/nwfilter/nwfilter_learnipaddr.c | 83 +++++++++-------------------- 1 file changed, 24 insertions(+), 59 deletions(-) diff --git a/src/nwfilter/nwfilter_learnipaddr.c b/src/nwfilter/nwfilter_le= arnipaddr.c index 99bffdc4fb..2c85972012 100644 --- a/src/nwfilter/nwfilter_learnipaddr.c +++ b/src/nwfilter/nwfilter_learnipaddr.c @@ -143,11 +143,9 @@ static bool threadsTerminate; int virNWFilterLockIface(const char *ifname) { - virNWFilterIfaceLock *ifaceLock; + VIR_LOCK_GUARD lock =3D virLockGuardLock(&ifaceMapLock); + virNWFilterIfaceLock *ifaceLock =3D virHashLookup(ifaceLockMap, ifname= ); =20 - virMutexLock(&ifaceMapLock); - - ifaceLock =3D virHashLookup(ifaceLockMap, ifname); if (!ifaceLock) { ifaceLock =3D g_new0(virNWFilterIfaceLock, 1); =20 @@ -155,21 +153,20 @@ virNWFilterLockIface(const char *ifname) virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("mutex initialization failed")); g_free(ifaceLock); - goto error; + return -1; } =20 if (virStrcpyStatic(ifaceLock->ifname, ifname) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("interface name %s does not fit into " - "buffer "), + _("interface name %s does not fit into buffer"), ifaceLock->ifname); g_free(ifaceLock); - goto error; + return -1; } =20 while (virHashAddEntry(ifaceLockMap, ifname, ifaceLock)) { g_free(ifaceLock); - goto error; + return -1; } =20 ifaceLock->refctr =3D 0; @@ -177,27 +174,17 @@ virNWFilterLockIface(const char *ifname) =20 ifaceLock->refctr++; =20 - virMutexUnlock(&ifaceMapLock); - virMutexLock(&ifaceLock->lock); =20 return 0; - - error: - virMutexUnlock(&ifaceMapLock); - - return -1; } =20 =20 void virNWFilterUnlockIface(const char *ifname) { - virNWFilterIfaceLock *ifaceLock; - - virMutexLock(&ifaceMapLock); - - ifaceLock =3D virHashLookup(ifaceLockMap, ifname); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&ifaceMapLock); + virNWFilterIfaceLock *ifaceLock =3D virHashLookup(ifaceLockMap, ifname= ); =20 if (ifaceLock) { virMutexUnlock(&ifaceLock->lock); @@ -206,8 +193,6 @@ virNWFilterUnlockIface(const char *ifname) if (ifaceLock->refctr =3D=3D 0) virHashRemoveEntry(ifaceLockMap, ifname); } - - virMutexUnlock(&ifaceMapLock); } =20 =20 @@ -228,17 +213,13 @@ virNWFilterIPAddrLearnReqFree(virNWFilterIPAddrLearnR= eq *req) static int virNWFilterRegisterLearnReq(virNWFilterIPAddrLearnReq *req) { - int res =3D -1; g_autofree char *ifindex_str =3D g_strdup_printf("%d", req->ifindex); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&pendingLearnReqLock); =20 - virMutexLock(&pendingLearnReqLock); - - if (!virHashLookup(pendingLearnReq, ifindex_str)) - res =3D virHashAddEntry(pendingLearnReq, ifindex_str, req); - - virMutexUnlock(&pendingLearnReqLock); + if (virHashLookup(pendingLearnReq, ifindex_str)) + return -1; =20 - return res; + return virHashAddEntry(pendingLearnReq, ifindex_str, req); } =20 =20 @@ -247,9 +228,7 @@ virNWFilterRegisterLearnReq(virNWFilterIPAddrLearnReq *= req) int virNWFilterTerminateLearnReq(const char *ifname) { - int rc =3D -1; int ifindex; - virNWFilterIPAddrLearnReq *req; g_autofree char *ifindex_str =3D NULL; =20 /* It's possible that it's already been removed as a result of @@ -262,38 +241,30 @@ virNWFilterTerminateLearnReq(const char *ifname) =20 if (virNetDevGetIndex(ifname, &ifindex) < 0) { virResetLastError(); - return rc; + return -1; } =20 ifindex_str =3D g_strdup_printf("%d", ifindex); =20 - virMutexLock(&pendingLearnReqLock); - - req =3D virHashLookup(pendingLearnReq, ifindex_str); - if (req) { - rc =3D 0; - req->terminate =3D true; + VIR_WITH_MUTEX_LOCK_GUARD(&pendingLearnReqLock) { + virNWFilterIPAddrLearnReq *req; + if ((req =3D virHashLookup(pendingLearnReq, ifindex_str))) { + req->terminate =3D true; + return 0; + } } =20 - virMutexUnlock(&pendingLearnReqLock); - - return rc; + return -1; } =20 =20 bool virNWFilterHasLearnReq(int ifindex) { - void *res; g_autofree char *ifindex_str =3D g_strdup_printf("%d", ifindex); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&pendingLearnReqLock); =20 - virMutexLock(&pendingLearnReqLock); - - res =3D virHashLookup(pendingLearnReq, ifindex_str); - - virMutexUnlock(&pendingLearnReqLock); - - return res !=3D NULL; + return virHashLookup(pendingLearnReq, ifindex_str) !=3D NULL; } =20 =20 @@ -309,16 +280,10 @@ freeLearnReqEntry(void *payload) static virNWFilterIPAddrLearnReq * virNWFilterDeregisterLearnReq(int ifindex) { - virNWFilterIPAddrLearnReq *res; g_autofree char *ifindex_str =3D g_strdup_printf("%d", ifindex); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&pendingLearnReqLock); =20 - virMutexLock(&pendingLearnReqLock); - - res =3D virHashSteal(pendingLearnReq, ifindex_str); - - virMutexUnlock(&pendingLearnReqLock); - - return res; + return virHashSteal(pendingLearnReq, ifindex_str); } =20 #endif --=20 2.31.1 From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468794; cv=none; d=zohomail.com; s=zohoarc; b=RXeDGefwWfMb7TmHy6rNihkzE8rgSus+RwO1+lwA8rr++m1OEVgU7KXPf98Z6A1YDTNMMpgCRh8tfAShmXlGxnbc2hwUV1xjxpLiMQL9RaP71WNJX62B/KVzSyS+andO1uBrj8B60sPo83y9YUP4Y1sv0tSd+EljcwlXvnzPVaY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468794; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7rMBn5qVlrhCazO2KW9JEstQmGrO4JWIMdBU6AhSQjY=; b=IoczXkw+nAS08B8e1rTVB1zqgmD9qxinHULj9CI5HNEG7OHx+8hHByaeVbZ2GobAomkvBTMLONECYJGL+WMl5Tlfq2jqPLuk/0x7ZoEhzr9CtSPVVtTXZ6Bso+wrta9oMABb7vF6Is1oNiN5udSKdnrZpRUbBQqinEOzB+ETIYI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1647468794913260.50373356511227; Wed, 16 Mar 2022 15:13:14 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-605-s7SV-gnOM32Y6TkhEJYung-1; Wed, 16 Mar 2022 18:10:54 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id DE0B5806600; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id BBC731454539; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 7DDF1194036F; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id DD84B1953541 for ; Wed, 16 Mar 2022 22:10:49 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id C304FC44AE8; Wed, 16 Mar 2022 22:10:49 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id 49368C44AE5; Wed, 16 Mar 2022 22:10:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468793; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=7rMBn5qVlrhCazO2KW9JEstQmGrO4JWIMdBU6AhSQjY=; b=GSIb8cHaJUE+ADOtbT1uq6HWAG+qyjHFd/5AUMwWYIFmWzTec91lH9/CEuHwS3oz65lO4p x0Xff43YY4srVW4ez9BeQsyfKBIC4goSPLNP7GK62fWTaLBRtmpqxi879URcuaZ7lrks+T sskc8VlHN3lV1W45ov9hbvgBqYgACMM= X-MC-Unique: s7SV-gnOM32Y6TkhEJYung-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 09/13] nwfilter_ipaddrmap: Use automatic mutex management Date: Wed, 16 Mar 2022 23:10:38 +0100 Message-Id: <20220316221042.97147-10-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.7 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647468801918100002 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/conf/nwfilter_ipaddrmap.c | 80 ++++++++++++++--------------------- 1 file changed, 31 insertions(+), 49 deletions(-) diff --git a/src/conf/nwfilter_ipaddrmap.c b/src/conf/nwfilter_ipaddrmap.c index e2f123b9d9..4090cc2769 100644 --- a/src/conf/nwfilter_ipaddrmap.c +++ b/src/conf/nwfilter_ipaddrmap.c @@ -49,37 +49,28 @@ static GHashTable *ipAddressMap; int virNWFilterIPAddrMapAddIPAddr(const char *ifname, char *addr) { - int ret =3D -1; - char *addrCopy; + g_autofree char *addrCopy =3D g_strdup(addr); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&ipAddressMapLock); virNWFilterVarValue *val; =20 - addrCopy =3D g_strdup(addr); - - virMutexLock(&ipAddressMapLock); - - val =3D virHashLookup(ipAddressMap, ifname); - if (!val) { - val =3D virNWFilterVarValueCreateSimple(addrCopy); - if (!val) - goto cleanup; - addrCopy =3D NULL; - ret =3D virHashUpdateEntry(ipAddressMap, ifname, val); - if (ret < 0) - virNWFilterVarValueFree(val); - goto cleanup; - } else { + if ((val =3D virHashLookup(ipAddressMap, ifname)) !=3D NULL) { if (virNWFilterVarValueAddValue(val, addrCopy) < 0) - goto cleanup; + return -1; + addrCopy =3D NULL; + return 0; } =20 - ret =3D 0; + if ((val =3D virNWFilterVarValueCreateSimple(addrCopy)) =3D=3D NULL) + return -1; =20 - cleanup: - virMutexUnlock(&ipAddressMapLock); - VIR_FREE(addrCopy); + addrCopy =3D NULL; + if (virHashUpdateEntry(ipAddressMap, ifname, val) < 0) { + virNWFilterVarValueFree(val); + return -1; + } =20 - return ret; + return 0; } =20 /* Delete all or a specific IP address from an interface. After this @@ -99,31 +90,28 @@ virNWFilterIPAddrMapAddIPAddr(const char *ifname, char = *addr) int virNWFilterIPAddrMapDelIPAddr(const char *ifname, const char *ipaddr) { - int ret =3D -1; + VIR_LOCK_GUARD lock =3D virLockGuardLock(&ipAddressMapLock); virNWFilterVarValue *val =3D NULL; =20 - virMutexLock(&ipAddressMapLock); - - if (ipaddr !=3D NULL) { - val =3D virHashLookup(ipAddressMap, ifname); - if (val) { - if (virNWFilterVarValueGetCardinality(val) =3D=3D 1 && - STREQ(ipaddr, - virNWFilterVarValueGetNthValue(val, 0))) - goto remove_entry; - virNWFilterVarValueDelValue(val, ipaddr); - ret =3D virNWFilterVarValueGetCardinality(val); - } - } else { - remove_entry: + if (!ipaddr) { /* remove whole entry */ virHashRemoveEntry(ipAddressMap, ifname); - ret =3D 0; + return 0; + } + + if (!(val =3D virHashLookup(ipAddressMap, ifname))) { + return -1; } =20 - virMutexUnlock(&ipAddressMapLock); + if (virNWFilterVarValueGetCardinality(val) =3D=3D 1 && + STREQ(ipaddr, virNWFilterVarValueGetNthValue(val, 0))) { + /* remove whole entry */ + virHashRemoveEntry(ipAddressMap, ifname); + return 0; + } =20 - return ret; + virNWFilterVarValueDelValue(val, ipaddr); + return virNWFilterVarValueGetCardinality(val); } =20 /* Get the list of IP addresses known to be in use by an interface @@ -135,15 +123,9 @@ virNWFilterIPAddrMapDelIPAddr(const char *ifname, cons= t char *ipaddr) virNWFilterVarValue * virNWFilterIPAddrMapGetIPAddr(const char *ifname) { - virNWFilterVarValue *res; - - virMutexLock(&ipAddressMapLock); - - res =3D virHashLookup(ipAddressMap, ifname); - - virMutexUnlock(&ipAddressMapLock); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&ipAddressMapLock); =20 - return res; + return virHashLookup(ipAddressMap, ifname); } =20 int --=20 2.31.1 From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468794; cv=none; d=zohomail.com; s=zohoarc; b=K9kTQeLL5F4SH46OltFUSsSQREVLLw0hc4CS3T5go+NVSGS+LtKpl4Zj+f9fGlbd5AXt1NIPSM4vndfn94q1M4gzn1rU34QhffG9Z+lpRxY2EY45bZwXP5u18Zl+51NQwWoNbK5MzX8yw1VNk9NrWSL980KEBOkS2nSxcKVKHCw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468794; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=l7fOiTaz6oOb9GJj3U/VyuvmWiz7vn0EeaNMMo+bbhc=; b=ZanEJytrwFburKlxIudQG7m854qA3yNYpx34G0nprMpnQ2P43ttz3H7bQ3cOvxTohn2P3pt4P3qUJ2HQ0lhWkGhdvalRAXauDWFf0ON7jlak2FEgSvAgnyalFYnkqgDpECWCt7eT9+81xE4D8mQiIcHZCnoHwM1bVlOjKookDLc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1647468794845787.3426133511842; Wed, 16 Mar 2022 15:13:14 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-278-H8e0hA7pP3Oqnsr4Zg0OvA-1; Wed, 16 Mar 2022 18:10:57 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id F0DF71066686; Wed, 16 Mar 2022 22:10:52 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id DD42840FF413; Wed, 16 Mar 2022 22:10:52 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id A22DF1949763; Wed, 16 Mar 2022 22:10:52 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 8BC5C193F518 for ; Wed, 16 Mar 2022 22:10:50 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 76046C44AE7; Wed, 16 Mar 2022 22:10:50 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id 065C9C44AE5; Wed, 16 Mar 2022 22:10:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468793; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=l7fOiTaz6oOb9GJj3U/VyuvmWiz7vn0EeaNMMo+bbhc=; b=e4z4iqT66onSeAaoFG3w4chHVguOoh1QHYLb942FupGMFNlXKl9s937wFYmpLU8HGUyTou /dT4/pE2rZy0BLnjVBNZPpYHcBJ4t1wWyZVQfqC0D0BB2rL0YF2IL+/PssPZ9JiX8X19mm y8PQfRTAvOHctpbHgTfADfYk+1gKt44= X-MC-Unique: H8e0hA7pP3Oqnsr4Zg0OvA-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 10/13] virNetlinkEventAddClient: Remove goto Date: Wed, 16 Mar 2022 23:10:39 +0100 Message-Id: <20220316221042.97147-11-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647468801905100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/util/virnetlink.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/util/virnetlink.c b/src/util/virnetlink.c index 3216765492..c6c8c33c7c 100644 --- a/src/util/virnetlink.c +++ b/src/util/virnetlink.c @@ -1114,7 +1114,8 @@ virNetlinkEventAddClient(virNetlinkEventHandleCallbac= k handleCB, unsigned int protocol) { size_t i; - int r, ret =3D -1; + int r =3D -1; + int ret =3D -1; virNetlinkEventSrvPrivate *srv =3D NULL; =20 if (protocol >=3D MAX_LINKS) @@ -1132,24 +1133,25 @@ virNetlinkEventAddClient(virNetlinkEventHandleCallb= ack handleCB, =20 VIR_DEBUG("adding client: %d.", nextWatch); =20 - r =3D 0; /* first try to re-use deleted free slots */ for (i =3D 0; i < srv->handlesCount; i++) { if (srv->handles[i].deleted =3D=3D VIR_NETLINK_HANDLE_DELETED) { r =3D i; - goto addentry; + break; } } - /* Resize the eventLoop array if needed */ - if (srv->handlesCount =3D=3D srv->handlesAlloc) { - VIR_DEBUG("Used %zu handle slots, adding at least %d more", - srv->handlesAlloc, NETLINK_EVENT_ALLOC_EXTENT); - VIR_RESIZE_N(srv->handles, srv->handlesAlloc, - srv->handlesCount, NETLINK_EVENT_ALLOC_EXTENT); + + if (r < 0) { + /* Resize the eventLoop array if needed */ + if (srv->handlesCount =3D=3D srv->handlesAlloc) { + VIR_DEBUG("Used %zu handle slots, adding at least %d more", + srv->handlesAlloc, NETLINK_EVENT_ALLOC_EXTENT); + VIR_RESIZE_N(srv->handles, srv->handlesAlloc, + srv->handlesCount, NETLINK_EVENT_ALLOC_EXTENT); + } + r =3D srv->handlesCount++; } - r =3D srv->handlesCount++; =20 - addentry: srv->handles[r].watch =3D nextWatch; srv->handles[r].handleCB =3D handleCB; srv->handles[r].removeCB =3D removeCB; --=20 2.31.1 From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468776; cv=none; d=zohomail.com; s=zohoarc; b=Wuxe3Jb8ZzLLGJVnFL9LkNLgUpd5O9ZaOsWryDcD4nZYaITBe49+lukPhKD+napJgP1esOkRP7Ed/m6X8BhN0wX0YnDjViKCAPCDRldT3UuJUTQH3Jll6ksdtTCbppt1zd+Hag+F20UI+GgMtqdWWxa4VUML7RZtn0Y5nYhhnZQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468776; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=XC5wJ/SkVNke04+ZZj03ie3hBdInorEsbKb+2X3LiqM=; b=Jjst11X2s81OIWwlGM/T+g/X5tLKxUUXY6B2C7FA4ZYTItX3OmpiEBkP69FQPEgZpACi7zOQ0Pyi7BCV3FW74lBskav3tQhK4p8B8aRFs7Gh0TkZpqseqbSfy9Uc3j9cqmxWy+kRDyX2nuvEDBnaoY8BtZBW0xQMvey1XmESjGI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1647468776330622.2991026215888; Wed, 16 Mar 2022 15:12:56 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-269-2iQPfAwWOXK8_72UIv7fcw-1; Wed, 16 Mar 2022 18:10:59 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5A5268002BF; Wed, 16 Mar 2022 22:10:56 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 478E9400F73F; Wed, 16 Mar 2022 22:10:56 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id E83071949761; Wed, 16 Mar 2022 22:10:55 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 4F545194E015 for ; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 2B849C44AE8; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id AE00AC44AE7; Wed, 16 Mar 2022 22:10:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468775; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=XC5wJ/SkVNke04+ZZj03ie3hBdInorEsbKb+2X3LiqM=; b=FqOtj1vsFCDGJCFzt7RK1ArDINt3ryWZDDccNTMnMStVy/88mlKfZxIotZzK61h3blrNJp bhkwn75JHzdf8AvTY9xMUKxYidPwugn6wMSkAR9HWck0AnB51iJHpuLX7kWMkeYM9rdxOK A5d2MsQ3DREHw5ccqGce7mMOb9vkhIU= X-MC-Unique: 2iQPfAwWOXK8_72UIv7fcw-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 11/13] virnetlink: Use automatic memory management Date: Wed, 16 Mar 2022 23:10:40 +0100 Message-Id: <20220316221042.97147-12-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.84 on 10.11.54.1 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647468776757100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/util/virnetlink.c | 222 +++++++++++++++++++----------------------- 1 file changed, 101 insertions(+), 121 deletions(-) diff --git a/src/util/virnetlink.c b/src/util/virnetlink.c index c6c8c33c7c..04a39a905b 100644 --- a/src/util/virnetlink.c +++ b/src/util/virnetlink.c @@ -799,18 +799,6 @@ virNetlinkGetErrorCode(struct nlmsghdr *resp, unsigned= int recvbuflen) } =20 =20 -static void -virNetlinkEventServerLock(virNetlinkEventSrvPrivate *driver) -{ - virMutexLock(&driver->lock); -} - -static void -virNetlinkEventServerUnlock(virNetlinkEventSrvPrivate *driver) -{ - virMutexUnlock(&driver->lock); -} - /** * virNetlinkEventRemoveClientPrimitive: * @@ -869,25 +857,23 @@ virNetlinkEventCallback(int watch, return; } =20 - virNetlinkEventServerLock(srv); - VIR_DEBUG("dispatching to max %d clients, called from event watch %d", (int)srv->handlesCount, watch); =20 - for (i =3D 0; i < srv->handlesCount; i++) { - if (srv->handles[i].deleted !=3D VIR_NETLINK_HANDLE_VALID) - continue; + VIR_WITH_MUTEX_LOCK_GUARD(&srv->lock) { + for (i =3D 0; i < srv->handlesCount; i++) { + if (srv->handles[i].deleted !=3D VIR_NETLINK_HANDLE_VALID) + continue; =20 - VIR_DEBUG("dispatching client %zu.", i); + VIR_DEBUG("dispatching client %zu.", i); =20 - (srv->handles[i].handleCB)(msg, length, &peer, &handled, - srv->handles[i].opaque); + (srv->handles[i].handleCB)(msg, length, &peer, &handled, + srv->handles[i].opaque); + } } =20 if (!handled) VIR_DEBUG("event not handled."); - - virNetlinkEventServerUnlock(srv); } =20 /** @@ -916,21 +902,21 @@ virNetlinkEventServiceStop(unsigned int protocol) if (!server[protocol]) return 0; =20 - virNetlinkEventServerLock(srv); - nl_close(srv->netlinknh); - virNetlinkFree(srv->netlinknh); - virEventRemoveHandle(srv->eventwatch); + VIR_WITH_MUTEX_LOCK_GUARD(&srv->lock) { + nl_close(srv->netlinknh); + virNetlinkFree(srv->netlinknh); + virEventRemoveHandle(srv->eventwatch); + + /* free any remaining clients on the list */ + for (i =3D 0; i < srv->handlesCount; i++) { + if (srv->handles[i].deleted =3D=3D VIR_NETLINK_HANDLE_VALID) + virNetlinkEventRemoveClientPrimitive(i, protocol); + } =20 - /* free any remaining clients on the list */ - for (i =3D 0; i < srv->handlesCount; i++) { - if (srv->handles[i].deleted =3D=3D VIR_NETLINK_HANDLE_VALID) - virNetlinkEventRemoveClientPrimitive(i, protocol); + server[protocol] =3D NULL; + VIR_FREE(srv->handles); } =20 - server[protocol] =3D NULL; - VIR_FREE(srv->handles); - virNetlinkEventServerUnlock(srv); - virMutexDestroy(&srv->lock); VIR_FREE(srv); return 0; @@ -1036,53 +1022,52 @@ virNetlinkEventServiceStart(unsigned int protocol, = unsigned int groups) return -1; } =20 - virNetlinkEventServerLock(srv); - - /* Allocate a new socket and get fd */ - if (!(srv->netlinknh =3D virNetlinkCreateSocket(protocol))) - goto error_locked; + VIR_WITH_MUTEX_LOCK_GUARD(&srv->lock) { + /* Allocate a new socket and get fd */ + if (!(srv->netlinknh =3D virNetlinkCreateSocket(protocol))) + goto error; =20 - fd =3D nl_socket_get_fd(srv->netlinknh); - if (fd < 0) { - virReportSystemError(errno, - "%s", _("cannot get netlink socket fd")); - goto error_server; - } + fd =3D nl_socket_get_fd(srv->netlinknh); + if (fd < 0) { + virReportSystemError(errno, + "%s", _("cannot get netlink socket fd")); + goto error; + } =20 - if (groups && nl_socket_add_membership(srv->netlinknh, groups) < 0) { - virReportSystemError(errno, - "%s", _("cannot add netlink membership")); - goto error_server; - } + if (groups && nl_socket_add_membership(srv->netlinknh, groups) < 0= ) { + virReportSystemError(errno, + "%s", _("cannot add netlink membership")); + goto error; + } =20 - if (nl_socket_set_nonblocking(srv->netlinknh)) { - virReportSystemError(errno, "%s", - _("cannot set netlink socket nonblocking")); - goto error_server; - } + if (nl_socket_set_nonblocking(srv->netlinknh)) { + virReportSystemError(errno, "%s", + _("cannot set netlink socket nonblocking"= )); + goto error; + } =20 - if ((srv->eventwatch =3D virEventAddHandle(fd, - VIR_EVENT_HANDLE_READABLE, - virNetlinkEventCallback, - srv, NULL)) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Failed to add netlink event handle watch")); - goto error_server; - } + if ((srv->eventwatch =3D virEventAddHandle(fd, + VIR_EVENT_HANDLE_READABLE, + virNetlinkEventCallback, + srv, NULL)) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Failed to add netlink event handle watch")); + goto error; + } =20 - srv->netlinkfd =3D fd; - VIR_DEBUG("netlink event listener on fd: %i running", fd); + srv->netlinkfd =3D fd; + VIR_DEBUG("netlink event listener on fd: %i running", fd); =20 - ret =3D 0; - server[protocol] =3D srv; + ret =3D 0; + server[protocol] =3D srv; =20 - error_server: - if (ret < 0) { - nl_close(srv->netlinknh); - virNetlinkFree(srv->netlinknh); + error: + if (ret < 0 && srv->netlinknh) { + nl_close(srv->netlinknh); + virNetlinkFree(srv->netlinknh); + } } - error_locked: - virNetlinkEventServerUnlock(srv); + if (ret < 0) { virMutexDestroy(&srv->lock); VIR_FREE(srv); @@ -1129,45 +1114,44 @@ virNetlinkEventAddClient(virNetlinkEventHandleCallb= ack handleCB, return -1; } =20 - virNetlinkEventServerLock(srv); + VIR_WITH_MUTEX_LOCK_GUARD(&srv->lock) { + VIR_DEBUG("adding client: %d.", nextWatch); =20 - VIR_DEBUG("adding client: %d.", nextWatch); - - /* first try to re-use deleted free slots */ - for (i =3D 0; i < srv->handlesCount; i++) { - if (srv->handles[i].deleted =3D=3D VIR_NETLINK_HANDLE_DELETED) { - r =3D i; - break; + /* first try to re-use deleted free slots */ + for (i =3D 0; i < srv->handlesCount; i++) { + if (srv->handles[i].deleted =3D=3D VIR_NETLINK_HANDLE_DELETED)= { + r =3D i; + break; + } } - } =20 - if (r < 0) { - /* Resize the eventLoop array if needed */ - if (srv->handlesCount =3D=3D srv->handlesAlloc) { - VIR_DEBUG("Used %zu handle slots, adding at least %d more", - srv->handlesAlloc, NETLINK_EVENT_ALLOC_EXTENT); - VIR_RESIZE_N(srv->handles, srv->handlesAlloc, - srv->handlesCount, NETLINK_EVENT_ALLOC_EXTENT); + if (r < 0) { + /* Resize the eventLoop array if needed */ + if (srv->handlesCount =3D=3D srv->handlesAlloc) { + VIR_DEBUG("Used %zu handle slots, adding at least %d more", + srv->handlesAlloc, NETLINK_EVENT_ALLOC_EXTENT); + VIR_RESIZE_N(srv->handles, srv->handlesAlloc, + srv->handlesCount, NETLINK_EVENT_ALLOC_EXTENT= ); + } + r =3D srv->handlesCount++; } - r =3D srv->handlesCount++; - } =20 - srv->handles[r].watch =3D nextWatch; - srv->handles[r].handleCB =3D handleCB; - srv->handles[r].removeCB =3D removeCB; - srv->handles[r].opaque =3D opaque; - srv->handles[r].deleted =3D VIR_NETLINK_HANDLE_VALID; - if (macaddr) - virMacAddrSet(&srv->handles[r].macaddr, macaddr); - else - virMacAddrSetRaw(&srv->handles[r].macaddr, - (unsigned char[VIR_MAC_BUFLEN]){0, 0, 0, 0, 0, 0}= ); + srv->handles[r].watch =3D nextWatch; + srv->handles[r].handleCB =3D handleCB; + srv->handles[r].removeCB =3D removeCB; + srv->handles[r].opaque =3D opaque; + srv->handles[r].deleted =3D VIR_NETLINK_HANDLE_VALID; + if (macaddr) + virMacAddrSet(&srv->handles[r].macaddr, macaddr); + else + virMacAddrSetRaw(&srv->handles[r].macaddr, + (unsigned char[VIR_MAC_BUFLEN]){0, 0, 0, 0, 0= , 0}); =20 - VIR_DEBUG("added client to loop slot: %d. with macaddr ptr=3D%p", r, m= acaddr); + ret =3D nextWatch++; =20 - ret =3D nextWatch++; + VIR_DEBUG("added client to loop slot: %d. with macaddr ptr=3D%p", = r, macaddr); + } =20 - virNetlinkEventServerUnlock(srv); return ret; } =20 @@ -1189,7 +1173,6 @@ virNetlinkEventRemoveClient(int watch, const virMacAd= dr *macaddr, unsigned int protocol) { size_t i; - int ret =3D -1; virNetlinkEventSrvPrivate *srv =3D NULL; =20 if (protocol >=3D MAX_LINKS) @@ -1204,28 +1187,25 @@ virNetlinkEventRemoveClient(int watch, const virMac= Addr *macaddr, return -1; } =20 - virNetlinkEventServerLock(srv); + VIR_WITH_MUTEX_LOCK_GUARD(&srv->lock) { + for (i =3D 0; i < srv->handlesCount; i++) { + if (srv->handles[i].deleted !=3D VIR_NETLINK_HANDLE_VALID) + continue; =20 - for (i =3D 0; i < srv->handlesCount; i++) { - if (srv->handles[i].deleted !=3D VIR_NETLINK_HANDLE_VALID) - continue; + if ((watch && srv->handles[i].watch =3D=3D watch) || + (!watch && + virMacAddrCmp(macaddr, &srv->handles[i].macaddr) =3D=3D 0= )) { =20 - if ((watch && srv->handles[i].watch =3D=3D watch) || - (!watch && - virMacAddrCmp(macaddr, &srv->handles[i].macaddr) =3D=3D 0)) { - - VIR_DEBUG("removed client: %d by %s.", - srv->handles[i].watch, watch ? "index" : "mac"); - virNetlinkEventRemoveClientPrimitive(i, protocol); - ret =3D 0; - goto cleanup; + VIR_DEBUG("removed client: %d by %s.", + srv->handles[i].watch, watch ? "index" : "mac"); + virNetlinkEventRemoveClientPrimitive(i, protocol); + return 0; + } } } VIR_DEBUG("no client found to remove."); =20 - cleanup: - virNetlinkEventServerUnlock(srv); - return ret; + return -1; } =20 #else --=20 2.31.1 From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468791; cv=none; d=zohomail.com; s=zohoarc; b=BjtaChlS+CxiLHkSOfQ1MIdB53AdHp+XPn3dWJ84m2B0YvldOaNTWr19gY7rVqaz04iA/SRrJX9ZZ74E+32+lOzGIObhJzfW0ZVLensDQbnzAy0iF4bVhJH624T/BeN69C27il7x5VHS57n91MOxHFUv36HMgkbgZXgEv7a8qwk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468791; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=RAQCUbunK7dKhkaG/gLwyaarF2Vh0OvkZRK5oiJSzLk=; b=cc6PvpUyBruKiYkkR1TyBulY5eqxiQFWno6D0Y+pf7IFI7b6wjmvvWaV/CLVAddqnl4HJUmu3XNtQ/BfS7EOJsotqWkLk1S4meao3EYPoQCxNgv4JAV5Bes3MmFyvGp3d4U/+wT57qikEryRw9xQmIAoD91qe3LutojAcTvst7Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1647468791631585.3347352688737; Wed, 16 Mar 2022 15:13:11 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-582-p-JKbLZgP_Wy7ytQguDr6Q-1; Wed, 16 Mar 2022 18:10:59 -0400 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id DCFF51066689; Wed, 16 Mar 2022 22:10:56 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id C6DA5401E7B; Wed, 16 Mar 2022 22:10:56 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 4E2831953541; Wed, 16 Mar 2022 22:10:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id E20261930DF0 for ; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id D4C22C44AEB; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id 636E0C44AE7; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468790; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=RAQCUbunK7dKhkaG/gLwyaarF2Vh0OvkZRK5oiJSzLk=; b=gBoe6DpKKkySFkIUIVBgplP9R+phhmsLHR/aP01W2gqv/FScDO0eRHTtkFcNXhY9GOGBNw Q2tXIlAWw4vTzvP+G3kdjURD1nkUgc012Mol/hwdjqH1ozRvWFfi82iT/x7jbamZyI74MU Gyd4e3fnYUmX1z+2SE/+ys9EyBZ515I= X-MC-Unique: p-JKbLZgP_Wy7ytQguDr6Q-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 12/13] remote_daemon_stream: Use automatic memory management Date: Wed, 16 Mar 2022 23:10:41 +0100 Message-Id: <20220316221042.97147-13-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647468792834100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/remote/remote_daemon_stream.c | 34 +++++++++++++------------------ 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/remote/remote_daemon_stream.c b/src/remote/remote_daemon_s= tream.c index eb7ed5edf3..a6d2c915e6 100644 --- a/src/remote/remote_daemon_stream.c +++ b/src/remote/remote_daemon_stream.c @@ -119,8 +119,7 @@ daemonStreamEvent(virStreamPtr st, int events, void *op= aque) virNetServerClient *client =3D opaque; daemonClientStream *stream; daemonClientPrivate *priv =3D virNetServerClientGetPrivateData(client); - - virMutexLock(&priv->lock); + VIR_LOCK_GUARD lock =3D virLockGuardLock(&priv->lock); =20 stream =3D priv->streams; while (stream) { @@ -132,7 +131,7 @@ daemonStreamEvent(virStreamPtr st, int events, void *op= aque) if (!stream) { VIR_WARN("event for client=3D%p stream st=3D%p, but missing stream= state", client, st); virStreamEventRemoveCallback(st); - goto cleanup; + return; } =20 VIR_DEBUG("st=3D%p events=3D%d EOF=3D%d closed=3D%d", st, events, stre= am->recvEOF, stream->closed); @@ -142,7 +141,7 @@ daemonStreamEvent(virStreamPtr st, int events, void *op= aque) if (daemonStreamHandleWrite(client, stream) < 0) { daemonRemoveClientStream(client, stream); virNetServerClientClose(client); - goto cleanup; + return; } } =20 @@ -152,7 +151,7 @@ daemonStreamEvent(virStreamPtr st, int events, void *op= aque) if (daemonStreamHandleRead(client, stream) < 0) { daemonRemoveClientStream(client, stream); virNetServerClientClose(client); - goto cleanup; + return; } /* If we detected EOF during read processing, * then clear hangup/error conditions, since @@ -177,7 +176,7 @@ daemonStreamEvent(virStreamPtr st, int events, void *op= aque) virNetMessageFree(msg); daemonRemoveClientStream(client, stream); virNetServerClientClose(client); - goto cleanup; + return; } break; case VIR_NET_ERROR: @@ -187,7 +186,7 @@ daemonStreamEvent(virStreamPtr st, int events, void *op= aque) virNetMessageFree(msg); daemonRemoveClientStream(client, stream); virNetServerClientClose(client); - goto cleanup; + return; } break; } @@ -206,7 +205,7 @@ daemonStreamEvent(virStreamPtr st, int events, void *op= aque) if (!(msg =3D virNetMessageNew(false))) { daemonRemoveClientStream(client, stream); virNetServerClientClose(client); - goto cleanup; + return; } msg->cb =3D daemonStreamMessageFinished; msg->opaque =3D stream; @@ -220,7 +219,7 @@ daemonStreamEvent(virStreamPtr st, int events, void *op= aque) virNetMessageFree(msg); daemonRemoveClientStream(client, stream); virNetServerClientClose(client); - goto cleanup; + return; } } =20 @@ -263,7 +262,7 @@ daemonStreamEvent(virStreamPtr st, int events, void *op= aque) daemonRemoveClientStream(client, stream); if (ret < 0) virNetServerClientClose(client); - goto cleanup; + return; } =20 if (stream->closed) { @@ -271,9 +270,6 @@ daemonStreamEvent(virStreamPtr st, int events, void *op= aque) } else { daemonStreamUpdateEvents(stream); } - - cleanup: - virMutexUnlock(&priv->lock); } =20 =20 @@ -460,13 +456,11 @@ int daemonAddClientStream(virNetServerClient *client, if (transmit) stream->tx =3D true; =20 - virMutexLock(&priv->lock); - stream->next =3D priv->streams; - priv->streams =3D stream; - - daemonStreamUpdateEvents(stream); - - virMutexUnlock(&priv->lock); + VIR_WITH_MUTEX_LOCK_GUARD(&priv->lock) { + stream->next =3D priv->streams; + priv->streams =3D stream; + daemonStreamUpdateEvents(stream); + } =20 return 0; } --=20 2.31.1 From nobody Wed May 15 04:20:46 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1647468659; cv=none; d=zohomail.com; s=zohoarc; b=Nk5L5FkBaYyp2m6mtcYQImVWD/jfkE0H74lgj8qEfEM9bqeFL/OggqBSACsDURUTKrZO/8cK1n1rg15kxN+S2lR0eukB06JQ3SUUhoktrD3W778ytFcVJAtvAMSZBb4xVe8N4x0qQI/Kq9zSE9MnWHv05Vbjlzc2yPKrHLrAkiM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647468659; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=n6z/WiQIM2oEbRxp/lJa29+awYvnE8H3buhPAdrVLFQ=; b=e22xVVo9wLvi6FG+WMJRgOuhmW7+HpPT6K+LEb0rNNhZiI2aZju5RrULMWBWz/GQkLjoygYd+ggPCWteAyfhcez0VSeS0f/RTq5q3RVRPuPippOwNn5ZsYT2GLZbCR3QEJWuaKWEREZ2K8iQU3yzggT31OeKuqu9mC3K/OS/kjY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1647468658827538.7745843520606; Wed, 16 Mar 2022 15:10:58 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-201-s3KPkYqsMDy38MsxFEbf4g-1; Wed, 16 Mar 2022 18:10:56 -0400 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3BEB71C068C3; Wed, 16 Mar 2022 22:10:54 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 27FF8454D71; Wed, 16 Mar 2022 22:10:54 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id E8D821949763; Wed, 16 Mar 2022 22:10:53 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id A4734194034E for ; Wed, 16 Mar 2022 22:10:52 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 893AEC44AE9; Wed, 16 Mar 2022 22:10:52 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.193.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1875BC44AE8; Wed, 16 Mar 2022 22:10:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647468657; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=n6z/WiQIM2oEbRxp/lJa29+awYvnE8H3buhPAdrVLFQ=; b=Pzg/8E44mUU6Lm6XW6Irboq2HHgP4xBytD9lVAPnjp5HjbQFarpZweFrwuQEqAOptPUVNF djf9A0iXMeUCChKqojxIupnIzlkeQfqq0eKElCktfXXCwH6jONju9lNC5uhvXGq2WciEnV ER0GG+Lv0iDIpAdS54jZt7udbTgbCmg= X-MC-Unique: s3KPkYqsMDy38MsxFEbf4g-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH v2 13/13] qemu_conf: Use automatic memory management Date: Wed, 16 Mar 2022 23:10:42 +0100 Message-Id: <20220316221042.97147-14-twiederh@redhat.com> In-Reply-To: <20220316221042.97147-1-twiederh@redhat.com> References: <20220316221042.97147-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Wiederhake Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.9 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1647468659569100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/qemu/qemu_conf.c | 70 ++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 41 deletions(-) diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 81449b8b77..4b5f75b694 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -85,17 +85,6 @@ static int virQEMUConfigOnceInit(void) VIR_ONCE_GLOBAL_INIT(virQEMUConfig); =20 =20 -static void -qemuDriverLock(virQEMUDriver *driver) -{ - virMutexLock(&driver->lock); -} -static void -qemuDriverUnlock(virQEMUDriver *driver) -{ - virMutexUnlock(&driver->lock); -} - #ifndef DEFAULT_LOADER_NVRAM # define DEFAULT_LOADER_NVRAM \ "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd:" \ @@ -1279,11 +1268,9 @@ virQEMUDriverConfigSetDefaults(virQEMUDriverConfig *= cfg) =20 virQEMUDriverConfig *virQEMUDriverGetConfig(virQEMUDriver *driver) { - virQEMUDriverConfig *conf; - qemuDriverLock(driver); - conf =3D virObjectRef(driver->config); - qemuDriverUnlock(driver); - return conf; + VIR_LOCK_GUARD lock =3D virLockGuardLock(&driver->lock); + + return virObjectRef(driver->config); } =20 virDomainXMLOption * @@ -1303,16 +1290,13 @@ virQEMUDriverCreateXMLConf(virQEMUDriver *driver, virCPUDef * virQEMUDriverGetHostCPU(virQEMUDriver *driver) { - virCPUDef *hostcpu; - - qemuDriverLock(driver); - - if (!driver->hostcpu) - driver->hostcpu =3D virCPUProbeHost(virArchFromHost()); + virCPUDef *hostcpu =3D NULL; =20 - hostcpu =3D driver->hostcpu; - - qemuDriverUnlock(driver); + VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) { + if (!driver->hostcpu) + driver->hostcpu =3D virCPUProbeHost(virArchFromHost()); + hostcpu =3D driver->hostcpu; + } =20 if (hostcpu) virCPUDefRef(hostcpu); @@ -1389,32 +1373,36 @@ virCaps *virQEMUDriverCreateCapabilities(virQEMUDri= ver *driver) * Returns: a reference to a virCaps *instance or NULL */ virCaps *virQEMUDriverGetCapabilities(virQEMUDriver *driver, - bool refresh) + bool refresh) { + bool force_refresh =3D false; virCaps *ret =3D NULL; + if (refresh) { virCaps *caps =3D NULL; if ((caps =3D virQEMUDriverCreateCapabilities(driver)) =3D=3D NULL) return NULL; =20 - qemuDriverLock(driver); - virObjectUnref(driver->caps); - driver->caps =3D caps; - } else { - qemuDriverLock(driver); - - if (driver->caps =3D=3D NULL || - driver->caps->nguests =3D=3D 0) { - VIR_DEBUG("Capabilities didn't detect any guests. Forcing a " - "refresh."); - qemuDriverUnlock(driver); - return virQEMUDriverGetCapabilities(driver, true); + VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) { + virObjectUnref(driver->caps); + driver->caps =3D caps; + ret =3D virObjectRef(driver->caps); } + + return ret; + } + + VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) { + force_refresh =3D driver->caps =3D=3D NULL || driver->caps->nguest= s =3D=3D 0; + if (!force_refresh) + ret =3D virObjectRef(driver->caps); } =20 - ret =3D virObjectRef(driver->caps); - qemuDriverUnlock(driver); - return ret; + if (!force_refresh) + return ret; + + VIR_DEBUG("Capabilities didn't detect any guests. Forcing a refresh."); + return virQEMUDriverGetCapabilities(driver, true); } =20 =20 --=20 2.31.1