From nobody Tue May 14 04:38:31 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=1646823777; cv=none; d=zohomail.com; s=zohoarc; b=TenHnyygm42s8UB7J4+vw8d2cplejG+Tgok0EHeUGnm0+ylnIgkHlfERKIpyNaFW7XKm2n5mIjH9EfLDI8TWwY4bq0LBq8MTOP+edEDugIJx2xeH20fxzcqlLdTZr98l6F8wOwoyTbsjgneHTMGRQmWO99I5vlGttnNQCRWZw4c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646823777; 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=XeQWw1BqHH5Vush2XMTDPYrs+fvF59flReLh73dlFIE=; b=Ew2jVVFx82ddZ76OyLYbxUt1nyg4crNqp29Mb76Wt+E0aNadv3xFJKG2VeWcbHbmiS1MA60eKLgEXMT6+1hWcWJJAdwFXsV48uxIqxkQY46gVtWmRY2bgd0Mv4MfN72FM1U0m19MOxseY4oK6qET9M1WO4YS7ZuSkcSqxuQVzrg= 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 1646823777496278.57458139902894; Wed, 9 Mar 2022 03:02:57 -0800 (PST) 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-576-601LD5YOPUScX3EElsdZDA-1; Wed, 09 Mar 2022 06:02:52 -0500 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 98360801585; Wed, 9 Mar 2022 11:02: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 851D57C33C8; Wed, 9 Mar 2022 11:02: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 5FDE11932121; Wed, 9 Mar 2022 11:02:50 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 896F9194F4AE for ; Wed, 9 Mar 2022 11:02:48 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 59C7E1059175; Wed, 9 Mar 2022 11:02:48 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.195.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id A264710550B8; Wed, 9 Mar 2022 11:02:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646823776; 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=XeQWw1BqHH5Vush2XMTDPYrs+fvF59flReLh73dlFIE=; b=DNkl/WXoNPpGe+DTk2i5/8vXHJ8tsu68v7VL62TvIIFe6C1ancrzhp3WNdJ+03tsav0O0k 8AQjpNSH2d+oVfJcuFmaFm3WKgYuKuQsPSxQghmjWKpu01zcxbTov6Ev8/ESe6qkaUDC+V IG9qEOdizM+/QB3637UFcBgHtMFk5Ak= X-MC-Unique: 601LD5YOPUScX3EElsdZDA-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 01/12] nwfilter_driver: Statically initialize mutex Date: Wed, 9 Mar 2022 12:02:19 +0100 Message-Id: <20220309110230.24213-2-twiederh@redhat.com> In-Reply-To: <20220309110230.24213-1-twiederh@redhat.com> References: <20220309110230.24213-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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: 1646823778427100003 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 --- 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..26edfd3691 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 mutex =3D VIR_MUTEX_INITIALIZER; + static void nwfilterDriverLock(void) { - virMutexLock(&driver->lock); + virMutexLock(&mutex); } static void nwfilterDriverUnlock(void) { - virMutexUnlock(&driver->lock); + virMutexUnlock(&mutex); } =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 Tue May 14 04:38:31 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=1646823785; cv=none; d=zohomail.com; s=zohoarc; b=JsmyrRZYzgEzWExdNez9ms1l0ud4V+6miPiWoVrgAkIFnw3NmRJSRxNEdiY2Pwr52BqYtzDqgwKTWsPpquCiplj05YwJf6fVNe0hkrbic1Dylnlk9G8oYmsETQn5P4qvL1AUGogLnd5cSzKMPiP+XIXW8cHNYo9H6LZpLaljM30= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646823785; 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=vAhhAD2zgxs3z/zTWPIqRGauY4SaV3mMaWiJp/o5lKU=; b=IDz/7MU9gCN0ijhytn6OyMHWtDy0bZz2bFTOUsdsr0jUOL0kxthviz/9GE82h8J6WKN7sHpsS4Apq+7ESRWyprZZ1QRDBXu1JHYtnuPF+s4shQdRpcrp4NF0tOSbpnaxCt5ok0yLlp7YCfLb1Jg3f/tCOZFB5S2/pp94ICawTkc= 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 1646823785534230.81234324700222; Wed, 9 Mar 2022 03:03:05 -0800 (PST) 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-551-q8dnQMImO2WCL1LSdtU1hw-1; Wed, 09 Mar 2022 06:03:02 -0500 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 6175A29AB3E9; Wed, 9 Mar 2022 11:03:00 +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 498D07C33C8; Wed, 9 Mar 2022 11:03:00 +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 1ABBD1932121; Wed, 9 Mar 2022 11:03:00 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 1D292194F4AE for ; Wed, 9 Mar 2022 11:02:59 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id E026D105916A; Wed, 9 Mar 2022 11:02:58 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.195.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id 349C510550B8; Wed, 9 Mar 2022 11:02:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646823785; 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=vAhhAD2zgxs3z/zTWPIqRGauY4SaV3mMaWiJp/o5lKU=; b=WnjGII5/am+6MQ/+hZOP8qhlCDeRL1uIYClUzDFMKIPKbwR+ZvpLwoqtJ3zHz88Nu++q0r KY0gE08JXs9iwgx4OKn97cxZqdRvM21+VUAEO7wXPHJGYfuo6uHsR0ByMIdfk7q04WIbxm xFF1dYWtClHP2mDebAeO+XfV85yeSdQ= X-MC-Unique: q8dnQMImO2WCL1LSdtU1hw-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 02/12] nwfilter_driver: Split up nwfilterStateCleanup Date: Wed, 9 Mar 2022 12:02:20 +0100 Message-Id: <20220309110230.24213-3-twiederh@redhat.com> In-Reply-To: <20220309110230.24213-1-twiederh@redhat.com> References: <20220309110230.24213-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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: 1646823791952100005 Content-Type: text/plain; charset="utf-8" This allows nwfilterStateCleanupLocked to be used in nwfilterStateInitialize in a later patch. Signed-off-by: Tim Wiederhake --- 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 26edfd3691..8eea9e5805 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 mutex =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(&mutex); + 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 Tue May 14 04:38:31 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=1646823787; cv=none; d=zohomail.com; s=zohoarc; b=lAhp/GCX87AVbjn1PwL/k8zokwhlTOikS1J426+gSpb0YT47wpOML9FWmRLD0qCvE22+1jcar+XgRFNzh2x7snoYEzytfnwluN0W8TbTAe9y7AEbZW0J9XKHioLfqCJyAMrz1PDo+JD8Jgb0AYd/5EZp4Bvn+ZlcMN0YwHOcktc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646823787; 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=NWP50IofjohlRIsaS0Mb71PNIJq51OQXjhDGBW1gdDE=; b=CK7ojGO+uHGoR+tTUy+amcNCyerSTIYt4OQOqbXUcQVem0TIycqrP/vYMi7KXoa/2Ah9RsXTvE982hDvAe7Nd0n1nJsdt04IACIE2TMU9MeVjvHXSpDYtRmg86QYPdrMdqVgMmRHFY4Xtyne5Ze6m1fqIqfalvIWhvd4iQo7x7I= 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 1646823787862675.0720566234971; Wed, 9 Mar 2022 03:03:07 -0800 (PST) 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-593-vA_uat6lO_Outl5xP3BoTA-1; Wed, 09 Mar 2022 06:03:04 -0500 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 A69DC3C01D99; Wed, 9 Mar 2022 11:03:02 +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 9118F4010FCD; Wed, 9 Mar 2022 11:03:02 +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 600AE1932121; Wed, 9 Mar 2022 11:03:02 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 4531B196A5E8 for ; Wed, 9 Mar 2022 11:03:00 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id EB01F105916E; Wed, 9 Mar 2022 11:02:59 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.195.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id 40BDE105916A; Wed, 9 Mar 2022 11:02:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646823787; 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=NWP50IofjohlRIsaS0Mb71PNIJq51OQXjhDGBW1gdDE=; b=YmbmWbNyROlIti3dzSvA6IsB4j6LAQYkO3GCGDWHozqIyFkYuNIPVQnhgLnkkU8fduAxa8 +0UWFkkzn/E6MTRuedM7Ge+kgYys2PDbQtlsWnKijO13ep2FVnORJ11de0ZGA2JPw9Aemu othYswl+tLu2+pP4WurcE//Ynrq2Ub0= X-MC-Unique: vA_uat6lO_Outl5xP3BoTA-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 03/12] nwfilter_driver: Use automatic mutex management Date: Wed, 9 Mar 2022 12:02:21 +0100 Message-Id: <20220309110230.24213-4-twiederh@redhat.com> In-Reply-To: <20220309110230.24213-1-twiederh@redhat.com> References: <20220309110230.24213-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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: 1646823789734100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake --- src/nwfilter/nwfilter_driver.c | 83 +++++++++++++--------------------- 1 file changed, 32 insertions(+), 51 deletions(-) diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 8eea9e5805..12bbbc661f 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -57,15 +57,6 @@ static int nwfilterStateReload(void); =20 static virMutex mutex =3D VIR_MUTEX_INITIALIZER; =20 -static void nwfilterDriverLock(void) -{ - virMutexLock(&mutex); -} -static void nwfilterDriverUnlock(void) -{ - virMutexUnlock(&mutex); -} - #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(&mutex); 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(&mutex) { + 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(&mutex) { + 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(&mutex) { + obj =3D virNWFilterObjListFindByName(driver->nwfilters, name); + } =20 if (!obj) { virReportError(VIR_ERR_NO_NWFILTER, @@ -491,17 +477,16 @@ nwfilterConnectListNWFilters(virConnectPtr conn, char **const names, int maxnames) { - int nnames; + VIR_LOCK_GUARD lock =3D { NULL }; =20 if (virConnectListNWFiltersEnsureACL(conn) < 0) return -1; =20 - nwfilterDriverLock(); - nnames =3D virNWFilterObjListGetNames(driver->nwfilters, conn, - virConnectListNWFiltersCheckACL, - names, maxnames); - nwfilterDriverUnlock(); - return nnames; + lock =3D virLockGuardLock(&mutex); + + return virNWFilterObjListGetNames(driver->nwfilters, conn, + virConnectListNWFiltersCheckACL, + names, maxnames); } =20 =20 @@ -510,19 +495,17 @@ nwfilterConnectListAllNWFilters(virConnectPtr conn, virNWFilterPtr **nwfilters, unsigned int flags) { - int ret; + VIR_LOCK_GUARD lock =3D { NULL }; =20 virCheckFlags(0, -1); =20 if (virConnectListAllNWFiltersEnsureACL(conn) < 0) return -1; =20 - nwfilterDriverLock(); - ret =3D virNWFilterObjListExport(conn, driver->nwfilters, nwfilters, - virConnectListAllNWFiltersCheckACL); - nwfilterDriverUnlock(); + lock =3D virLockGuardLock(&mutex); =20 - return ret; + return virNWFilterObjListExport(conn, driver->nwfilters, nwfilters, + virConnectListAllNWFiltersCheckACL); } =20 =20 @@ -531,6 +514,7 @@ nwfilterDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags) { + VIR_LOCK_GUARD lock =3D virLockGuardLock(&mutex); virNWFilterDef *def; virNWFilterObj *obj =3D NULL; virNWFilterDef *objdef; @@ -545,7 +529,6 @@ nwfilterDefineXMLFlags(virConnectPtr conn, return NULL; } =20 - nwfilterDriverLock(); virNWFilterWriteLockFilterUpdates(); =20 if (!(def =3D virNWFilterDefParseString(xml, flags))) @@ -572,7 +555,6 @@ nwfilterDefineXMLFlags(virConnectPtr conn, virNWFilterObjUnlock(obj); =20 virNWFilterUnlockFilterUpdates(); - nwfilterDriverUnlock(); return nwfilter; } =20 @@ -588,11 +570,11 @@ nwfilterDefineXML(virConnectPtr conn, static int nwfilterUndefine(virNWFilterPtr nwfilter) { + VIR_LOCK_GUARD lock =3D virLockGuardLock(&mutex); virNWFilterObj *obj; virNWFilterDef *def; int ret =3D -1; =20 - nwfilterDriverLock(); virNWFilterWriteLockFilterUpdates(); =20 if (!(obj =3D nwfilterObjFromNWFilter(nwfilter->uuid))) @@ -621,7 +603,6 @@ nwfilterUndefine(virNWFilterPtr nwfilter) virNWFilterObjUnlock(obj); =20 virNWFilterUnlockFilterUpdates(); - nwfilterDriverUnlock(); return ret; } =20 @@ -630,15 +611,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(&mutex) { + obj =3D nwfilterObjFromNWFilter(nwfilter->uuid); + } =20 if (!obj) return NULL; --=20 2.31.1 From nobody Tue May 14 04:38:31 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=1646824353; cv=none; d=zohomail.com; s=zohoarc; b=KDJUHXbB5QrM3amrin3PdfVKNiUGlyXpt1j9SZI0nJKjyzCXjAY2Fi7CyyJDt9f+APWoh2MQpWM2xjxSfdgGhpblbmQe6fhlgaZCro2pDOl1hK/9ufSWsHFZBB2gHe3LW62RZpsQUGQ7Xsvz617IqzQJ4wapjOorvelKSR93nzc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646824353; 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=wW07S1qKn4g7JOIOisrtgZKUbcRrwg9kVSeudyowb7k=; b=fgEi7u/YVVF76PfW11CAaQahGkT2ZO9epqlMujSU3XEkezuqbzwdve3gKUCXc5aj1F35Nyv0BeU24hwz1W9p45iZ75KgItvCTEfM3ljfn0oaHng+YEPcL/xlW3vJHKKsrTTCWSPQFZnUiokjpW1gW5nexBDj4S7/LQAZdgRF4Ok= 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 1646824353422756.5376282257048; Wed, 9 Mar 2022 03:12:33 -0800 (PST) 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-627-XeyencAuNaCP2aWXFh8ULA-1; Wed, 09 Mar 2022 06:12:30 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3E56329AA2FE; Wed, 9 Mar 2022 11:12:28 +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 298DF1121319; Wed, 9 Mar 2022 11:12:28 +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 A361C1932121; Wed, 9 Mar 2022 11:03:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 5E4EF1932121 for ; Wed, 9 Mar 2022 11:03:01 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 01C431059175; Wed, 9 Mar 2022 11:03:01 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.195.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4B30110550B8; Wed, 9 Mar 2022 11:03:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646824353; 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=wW07S1qKn4g7JOIOisrtgZKUbcRrwg9kVSeudyowb7k=; b=hlzUvWMfxrq41WzhvS3UWo4xD4+kmkhxDIb290cPbkSaLzIjuNCXWHW315Seu7cLueTBMM H6gwnvLEETgjmVrlVikkdE/lI/L8ZtAjb3JFnOLNX8yxb9kYRmwHbZCqkw6u3bho/dWjf7 6y5aLb+6Kcso2mAZH48y0IyeCMNMvcM= X-MC-Unique: XeyencAuNaCP2aWXFh8ULA-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 04/12] nwfilter_gentech: Use automatic mutex management Date: Wed, 9 Mar 2022 12:02:22 +0100 Message-Id: <20220309110230.24213-5-twiederh@redhat.com> In-Reply-To: <20220309110230.24213-1-twiederh@redhat.com> References: <20220309110230.24213-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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.78 on 10.11.54.3 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: 1646824354839100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake --- src/nwfilter/nwfilter_gentech_driver.c | 34 +++++++++----------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 7bbf1e12fb..3f888ce873 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,10 @@ virNWFilterInstantiateFilterLate(virNWFilterDriverStat= e *driver, { int rc; bool foundNewFilter =3D false; + VIR_LOCK_GUARD lock =3D { NULL }; =20 virNWFilterReadLockFilterUpdates(); - virMutexLock(&updateMutex); + lock =3D virLockGuardLock(&updateMutex); =20 rc =3D virNWFilterInstantiateFilterUpdate(driver, true, binding, ifindex, @@ -772,7 +765,6 @@ virNWFilterInstantiateFilterLate(virNWFilterDriverState= *driver, } =20 virNWFilterUnlockFilterUpdates(); - virMutexUnlock(&updateMutex); =20 return rc; } @@ -894,11 +886,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 Tue May 14 04:38:31 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=1646823791; cv=none; d=zohomail.com; s=zohoarc; b=KPkjutAODRjz/F5/4zXpSP2MpNeHnf8f0r0bdbxhLveDT+Av0L0+pc7p6tFyVOeEHFoNVv3cBKzcvElzCnM2EpcQ/+99gwMmyenQDNtQBJr/2vHdvK9rL3GXUMzE0xAXZ2YLcvfp2avHD1lctZ1kqUjY/On9ujANX4NqKdDw/Z8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646823791; 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=GudWwwiF4H5+UfHn2G1Uf1onwAgMy1zGB9INZKnHN/6vc4CMafhT2mIlC5hMQM6QIvZ9JzEx9huqfdSp/g3OpvxhCsmtdEFfm93aohc7qLVx9M25RijLbK1+BK8mDcV29s+hZOCi/ENnsXcopNCstv1znE7LWkXgYcAxce5+4ac= 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 1646823791069190.59190295957046; Wed, 9 Mar 2022 03:03:11 -0800 (PST) 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-39-K9SFdH8YP9qc7rsKH3Sh3A-1; Wed, 09 Mar 2022 06:03:08 -0500 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 74242805F46; Wed, 9 Mar 2022 11:03:06 +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 483FC141DEDD; Wed, 9 Mar 2022 11:03:06 +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 C477E196A5F5; Wed, 9 Mar 2022 11:03:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 3B7B21932102 for ; Wed, 9 Mar 2022 11:03:02 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 0D9BB1059175; Wed, 9 Mar 2022 11:03:02 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.195.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id 55EB810550B8; Wed, 9 Mar 2022 11:03:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646823790; 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=FBpR4bwGM8UG/quX0xOZWnKCFenm53FP8D8nIVPdL109S7uRy4axunS1mFklLBKnVdodJH UgWySi09LnErXxx3+I6ydZ2cO10LBEljG3lFlfznVOqUHMOQdyOLOzYE3wpyekPtzbjnuZ eE9R4ylq+DX1tJT+w1Kav4wQiVpaK0w= X-MC-Unique: K9SFdH8YP9qc7rsKH3Sh3A-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 05/12] nwfilter_dhcpsnoop: Replace virNWFilterSnoopActiveLock macros Date: Wed, 9 Mar 2022 12:02:23 +0100 Message-Id: <20220309110230.24213-6-twiederh@redhat.com> In-Reply-To: <20220309110230.24213-1-twiederh@redhat.com> References: <20220309110230.24213-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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: 1646823791417100003 Content-Type: text/plain; charset="utf-8" Use automatic mutex management instead. Signed-off-by: Tim Wiederhake --- 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 Tue May 14 04:38:31 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=1646824382; cv=none; d=zohomail.com; s=zohoarc; b=liviLLsc4t7tyLiBWgm2dLiKl5/AlT7UMPX1DaAwWuNeEqIfU4bHfdxrNOOsa+fHPfdWKErPB0Apii1hq6/aWc3FVC4okJwvEa/Qi+SfZAYjJ6+KOoCM4VXS9xUNG4raLFkPQyAhdmKkoE9cgM50ExmFff24RNsmhKzE9USMS8I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646824382; 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=1TAlwG6qWyZjSGa4gmbA0MsQoecDkKrE0ih2xQJ3uGI=; b=R1Yop9IBR/Br4Fwi1Q/JNAPO3lomultUQFABmmo9DBxmfPqcpjTFRH/6ERZCrZden/BdTJmZ1kxQR+6Cq2ZqTgSSlIIgwPXbXTdBAocydEFcq+DhX7sBjd585AiDHXmlZf8TM1of7R7UWWxuUCHOTgxrVdohWY4mQ3xLbIhlrm0= 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 1646824382005817.0886165739062; Wed, 9 Mar 2022 03:13:02 -0800 (PST) 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-443-J1fBSlVYNPa-q1IXwGIvQA-1; Wed, 09 Mar 2022 06:12:31 -0500 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 EA2F98026FA; Wed, 9 Mar 2022 11:12:28 +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 D83E01410F3B; Wed, 9 Mar 2022 11:12:28 +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 2E3C3195F43F; Wed, 9 Mar 2022 11:03:10 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 44717195F43F for ; Wed, 9 Mar 2022 11:03:09 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 15B60105917D; Wed, 9 Mar 2022 11:03:09 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.195.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5DBFE105917B; Wed, 9 Mar 2022 11:03:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646824381; 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=1TAlwG6qWyZjSGa4gmbA0MsQoecDkKrE0ih2xQJ3uGI=; b=Nf2aVjyDaJmyRW8Gpjj40a+Q0SeS/6Erdsks8HMMdUEjr6yAxEbdxyYjygfkdAHoyGsiS9 Rg6f/eP4yjFY+I5Cb5yd/WmVwmWw002iSM6WELCctLYEu+O3SA2MYLU9+0OwwBak32Keq8 Pmu0BJAfYYK9ORHpwxM+Lr0tD70I0oE= X-MC-Unique: J1fBSlVYNPa-q1IXwGIvQA-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 06/12] nwfilter_dhcpsnoop: Replace virNWFilterSnoopLock macros Date: Wed, 9 Mar 2022 12:02:24 +0100 Message-Id: <20220309110230.24213-7-twiederh@redhat.com> In-Reply-To: <20220309110230.24213-1-twiederh@redhat.com> References: <20220309110230.24213-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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: 1646824409467100001 Content-Type: text/plain; charset="utf-8" Use automatic mutex management instead. Signed-off-by: Tim Wiederhake --- src/nwfilter/nwfilter_dhcpsnoop.c | 90 +++++++++++-------------------- 1 file changed, 30 insertions(+), 60 deletions(-) diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcp= snoop.c index c526653bc2..f18f7b80d6 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); @@ -1511,6 +1496,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, virThread thread; virNWFilterVarValue *dhcpsrvrs; bool threadPuts =3D false; + VIR_LOCK_GUARD lock =3D { NULL }; =20 virNWFilterSnoopIFKeyFMT(ifkey, binding->owneruuid, &binding->mac); =20 @@ -1556,7 +1542,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, goto exit_snoopreqput; } =20 - virNWFilterSnoopLock(); + lock =3D virLockGuardLock(&virNWFilterSnoopState.snoopLock); =20 if (virHashAddEntry(virNWFilterSnoopState.ifnameToKey, req->binding->portdevname, @@ -1621,8 +1607,6 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, =20 virNWFilterSnoopReqUnlock(req); =20 - virNWFilterSnoopUnlock(); - /* do not 'put' the req -- the thread will do this */ =20 return 0; @@ -1634,7 +1618,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, exit_rem_ifnametokey: virHashRemoveEntry(virNWFilterSnoopState.ifnameToKey, binding->portdev= name); exit_snoopunlock: - virNWFilterSnoopUnlock(); + virLockGuardUnlock(&lock); exit_snoopreqput: if (!threadPuts) virNWFilterSnoopReqPut(req); @@ -1695,23 +1679,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 +1810,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 +1870,6 @@ virNWFilterSnoopLeaseFileLoad(void) VIR_FORCE_FCLOSE(fp); =20 virNWFilterSnoopLeaseFileRefresh(); - - virNWFilterSnoopUnlock(); } =20 /* @@ -1953,11 +1929,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 +1972,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 +1995,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 +2019,6 @@ virNWFilterDHCPSnoopEnd(const char *ifname) =20 virNWFilterSnoopLeaseFileLoad(); } - - cleanup: - virNWFilterSnoopUnlock(); } =20 void @@ -2055,13 +2027,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 Tue May 14 04:38:31 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=1646823807; cv=none; d=zohomail.com; s=zohoarc; b=RShDvVyl8iX00TJPEhLD68mnMUhX+JsEoz6nPAK2WLYzi7v97R5txoVAVNaDwn3nWaSvalkUvH1BFmQs4Tfj14PFnxkqFzT2vi8fs3gOARHzJhGyiTw42H00NLo4CPv0mRRopepO6znoU10CJyl+46KWSIhDnf1ajXinuXJ6RDM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646823807; 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=o43fm13DihdO2ZQNUI3MExwEjmrifCrVe/xBB7Bd/Y8=; b=HXcrgxDGuyHMesIKAdbdWl5v+zePBr9pvCAklr5Swz/OItjpRRN5liDdnnDaf/iI4xn7T4e/IMdU6ruYSsxe3oIOqkmUWjmcQDLDtDBJu6X65M2jZLssS5g5ZQBjEsor0VM98gRDK5W9UTIQDfYUKUR9BxwFNGiqfu8i7lSGLn8= 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 1646823807892759.4374027217355; Wed, 9 Mar 2022 03:03:27 -0800 (PST) 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-568-Eprtlh20Mc2RPaNMRJdiPA-1; Wed, 09 Mar 2022 06:03:26 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 0979C296A610; Wed, 9 Mar 2022 11:03:24 +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 E46212166B13; Wed, 9 Mar 2022 11:03:23 +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 A1438196A5E5; Wed, 9 Mar 2022 11:03:23 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 26B23194F4AE for ; Wed, 9 Mar 2022 11:03:22 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id DAD591059174; Wed, 9 Mar 2022 11:03:21 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.195.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6C263105917B; Wed, 9 Mar 2022 11:03:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646823807; 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=o43fm13DihdO2ZQNUI3MExwEjmrifCrVe/xBB7Bd/Y8=; b=QAs++elggXRLay8d+9KTeJBrUqA1dnMmcXPDia6Aow0Fy/1S8KhzZsIG8fINTEMasNp6pQ aFeaqMeZAS73Yivs1hvdL8dTudmLFPGNGRkBzP+fjm3B5JnVqGL1YRz8UcA6wE6MWPhI9U qlUePCgT2OkeBZNdUt3h29mUfYoUl5Y= X-MC-Unique: Eprtlh20Mc2RPaNMRJdiPA-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 07/12] nwfilter_dhcpsnoop: Replace virNWFilterSnoopReqLock functions Date: Wed, 9 Mar 2022 12:02:25 +0100 Message-Id: <20220309110230.24213-8-twiederh@redhat.com> In-Reply-To: <20220309110230.24213-1-twiederh@redhat.com> References: <20220309110230.24213-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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.78 on 10.11.54.6 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: 1646823823061100001 Content-Type: text/plain; charset="utf-8" Use automatic mutex management instead. Signed-off-by: Tim Wiederhake --- src/nwfilter/nwfilter_dhcpsnoop.c | 273 +++++++++++------------------- 1 file changed, 95 insertions(+), 178 deletions(-) diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcp= snoop.c index f18f7b80d6..1cbb840749 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,8 +393,8 @@ virNWFilterSnoopIPLeaseInstallRule(virNWFilterSnoopIPLe= ase *ipl, bool instantiate) { g_autofree char *ipaddr =3D virSocketAddrFormat(&ipl->ipAddress); - int rc =3D -1; virNWFilterSnoopReq *req; + VIR_LOCK_GUARD lock =3D { NULL }; =20 if (!ipaddr) return -1; @@ -410,27 +402,20 @@ virNWFilterSnoopIPLeaseInstallRule(virNWFilterSnoopIP= Lease *ipl, req =3D ipl->snoopReq; =20 /* protect req->binding->portdevname */ - virNWFilterSnoopReqLock(req); + lock =3D virLockGuardLock(&req->lock); =20 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 +458,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 +468,6 @@ virNWFilterSnoopReqLeaseTimerRun(virNWFilterSnoopReq *r= eq) is_last); } =20 - virNWFilterSnoopReqUnlock(req); - return 0; } =20 @@ -562,24 +545,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 +557,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 +621,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 +661,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 +705,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 +752,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 +1220,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); - } =20 - /* 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; - } - - 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 +1297,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 +1311,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 +1378,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: @@ -1497,6 +1425,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, virNWFilterVarValue *dhcpsrvrs; bool threadPuts =3D false; VIR_LOCK_GUARD lock =3D { NULL }; + VIR_LOCK_GUARD lockReq =3D { NULL }; =20 virNWFilterSnoopIFKeyFMT(ifkey, binding->owneruuid, &binding->mac); =20 @@ -1564,7 +1493,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, } =20 /* prevent thread from holding req */ - virNWFilterSnoopReqLock(req); + lockReq =3D virLockGuardLock(&req->lock); =20 if (virThreadCreateFull(&thread, false, virNWFilterDHCPSnoopThread, "dhcp-snoop", false, req) !=3D 0) { @@ -1605,8 +1534,6 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, goto exit_snoop_cancel; } =20 - virNWFilterSnoopReqUnlock(req); - /* do not 'put' the req -- the thread will do this */ =20 return 0; @@ -1614,7 +1541,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriver *techdr= iver, exit_snoop_cancel: virNWFilterSnoopCancel(&req->threadkey); exit_snoopreq_unlock: - virNWFilterSnoopReqUnlock(req); + virLockGuardUnlock(&lockReq); exit_rem_ifnametokey: virHashRemoveEntry(virNWFilterSnoopState.ifnameToKey, binding->portdev= name); exit_snoopunlock: @@ -1705,12 +1632,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); @@ -1718,11 +1644,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 /* @@ -1739,12 +1661,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 @@ -1900,7 +1821,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, @@ -1916,8 +1837,6 @@ virNWFilterSnoopRemAllReqIter(const void *payload, g_clear_pointer(&req->binding->portdevname, g_free); } =20 - virNWFilterSnoopReqUnlock(req); - /* removal will call virNWFilterSnoopCancel() */ return 1; } @@ -1999,14 +1918,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 Tue May 14 04:38:31 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=1646823843; cv=none; d=zohomail.com; s=zohoarc; b=XiOiTDnF2Ce7p68GwbBz0LTUBFATpFxx0og/SIUno0g/dCXSQlhnbmdAzuf8Qg2aFfsJ1teV0O8pLDxkx6cXl3+MYHSEsLr6Um4yYhKQmm34vT93OUWvGAqssIh6FVY3ztZ+v21AsfTkRJodO/1yhB8M8jisoNOoJdXBcNctUv8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646823843; 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=m2T9d772fjCdumO9JyHKlnJAqBJG2ggBI0fK19PLm1XAOiIzQ5zsTbX6hawqpbPHkL0rUHtGO7Kpj7J30kDb9p8aGPo9TZi/lsYnjGBs9p44lctiDZFZio5JOMvrcQ2vLtDU/moVPci/iSYm3zdmIgxEk5aHht/RBpPtU0tULuI= 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 1646823843069961.9936183300415; Wed, 9 Mar 2022 03:04:03 -0800 (PST) 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-189-TUKY4jFfPzqy998CQP1TUQ-1; Wed, 09 Mar 2022 06:04:00 -0500 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 968473806709; Wed, 9 Mar 2022 11:03:58 +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 83ED07C0D8A; Wed, 9 Mar 2022 11:03:58 +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 5C5EB196A5E5; Wed, 9 Mar 2022 11:03:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id A86C2194F4AE for ; Wed, 9 Mar 2022 11:03:56 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 53732105917B; Wed, 9 Mar 2022 11:03:56 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.195.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9ADD31059176; Wed, 9 Mar 2022 11:03:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646823842; 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=KJtcrZjMM2gj/YEzqPU0xYRqmLX2CyMeL/SElYrJo1+H5qnce3W6F3ProUBn/pSV/9PH7m ThfzVBYSk0E8PZ1OmYq4SDVlf5GH7RVdCSPK07ib6CsbMP9bAza6mkVf2LVEW2fayyV1uZ r9FygxuUZ5Z40xMuPvWLC4ogRzMnJh4= X-MC-Unique: TUKY4jFfPzqy998CQP1TUQ-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 08/12] nwfilter_learnipaddr: Use automatic mutex management Date: Wed, 9 Mar 2022 12:02:26 +0100 Message-Id: <20220309110230.24213-9-twiederh@redhat.com> In-Reply-To: <20220309110230.24213-1-twiederh@redhat.com> References: <20220309110230.24213-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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: 1646823844940100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake --- 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 Tue May 14 04:38:31 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=1646823851; cv=none; d=zohomail.com; s=zohoarc; b=fOhD3Jx+g4tw3UDbMRX4a1s0TbNlnnZanoY+RFZ2hJGC1oYXFmH3jcNon6tmhq6QP4dpcCv35uBm8pw6JnQy0jz76zngO/GufKBId89qnsRkfj/HEeKexfUr/l94ZWc1TzTT9qsptIaDJfJEb7wVZG3TVU9SW8tuukgmTo7EWFI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646823851; 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=FP/JIYrEb47VrpP7AZpXRWUCuWbUS8uvsHsA8/jsJi5Trz2nAehCCKAUqgZ7tVGK8MIwfIwjPDLfu+VFSOWoJZdBTAmJMvecr1ZIGsRCsRQA55Uy8kYOYC4ccIxq+004fi42khmPr8cPpLsl+Mu2YtgA1Bx5oqFJb8PruRfzQqY= 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 1646823851743580.5611676932114; Wed, 9 Mar 2022 03:04:11 -0800 (PST) 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-581-51KGV8ZmOlKjU-pnvF8BvQ-1; Wed, 09 Mar 2022 06:04:10 -0500 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 68AFD811E9B; Wed, 9 Mar 2022 11:04:08 +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 566827C33C8; Wed, 9 Mar 2022 11:04:08 +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 1FB6B196A5D2; Wed, 9 Mar 2022 11:04:08 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id B6FE4196A5E5 for ; Wed, 9 Mar 2022 11:03:57 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 693D81059178; Wed, 9 Mar 2022 11:03:57 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.195.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id AC9C21059176; Wed, 9 Mar 2022 11:03:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646823851; 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=MioIC5dBPfGkOd74VdV8cWC/fj2k+YK7J2CzHROmwUtDwnVfWpUmMJxXgM4Ngtciy1LsQa T0i5/aHnIaj94+HbNhRr2mSo1V6pzBq29Te+xwJRneb+SFhdo4Wpr97asso+RUi5fbl6Ou ZGv61Y4+AErkX6Vz9esufMhuvg7zJT0= X-MC-Unique: 51KGV8ZmOlKjU-pnvF8BvQ-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 09/12] nwfilter_ipaddrmap: Use automatic mutex management Date: Wed, 9 Mar 2022 12:02:27 +0100 Message-Id: <20220309110230.24213-10-twiederh@redhat.com> In-Reply-To: <20220309110230.24213-1-twiederh@redhat.com> References: <20220309110230.24213-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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: 1646823854092100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake --- 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 Tue May 14 04:38:31 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=1646823848; cv=none; d=zohomail.com; s=zohoarc; b=lYxknlvQs8i/7DcEo3h3grkvoaXe1EYdtPZc0Z0urFik+AhuGqTBd4WGuWw98YdzPar7w8HvdHUGHKksg1ZrymkhNZxLJsVizJpAvT+POoefAoFLxYDgtBUsBXv+EbWKEZ7K7BysvINRbnzsQRxD0lRjIqRhseYkjX6u9VLCaoM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646823848; 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=7ZkuVDYsKtG+bTW0jpwUfnNLsoHpLUc4uroanm/atAc=; b=T1hW/By/FuGm9sKzF0XCNr03L4EdFNQU2r7LgX5KMCTu3Eyr/ERyO0HVCTGiz+WxZQHDE3c3TD5YqMViaVoxuZHF0wwrsYibKYHCkgm1sxp02gfZfICes7bWssIFVHGBvn6LOfj6ASNyB883FetGbXaLctP9OgVY73daWOtE+4c= 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 1646823848505406.8209737259067; Wed, 9 Mar 2022 03:04:08 -0800 (PST) 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-441-W64_MID-MW6dSiVUHQNwdw-1; Wed, 09 Mar 2022 06:04:04 -0500 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 1EF7E296A612; Wed, 9 Mar 2022 11:04:02 +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 05210C080AA; Wed, 9 Mar 2022 11:04:02 +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 A3F52196BB9E; Wed, 9 Mar 2022 11:04:01 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id B35B4196A5DB for ; Wed, 9 Mar 2022 11:03:58 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 80A511059172; Wed, 9 Mar 2022 11:03:58 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.195.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id C01D31059176; Wed, 9 Mar 2022 11:03:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646823847; 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=7ZkuVDYsKtG+bTW0jpwUfnNLsoHpLUc4uroanm/atAc=; b=M/uAW9CfOuWZ4hLIK56aj9tTlz1b0hnopABwm7PFr41bFYrXDYCKmStW2LLh//40QImjiY 7kAxBllGdm2qwLXHQ1fKU4DyQxMAdjkAMN8PUAn8lwNNQnC0YiN++ipYnQWZKosZqSAa7o 7/IwsIPggOYuuXGBYVWTEIcCK8KSICU= X-MC-Unique: W64_MID-MW6dSiVUHQNwdw-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 10/12] virnetlink: Use automatic memory management Date: Wed, 9 Mar 2022 12:02:28 +0100 Message-Id: <20220309110230.24213-11-twiederh@redhat.com> In-Reply-To: <20220309110230.24213-1-twiederh@redhat.com> References: <20220309110230.24213-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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: 1646823849728100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake --- src/util/virnetlink.c | 101 ++++++++++++++++-------------------------- 1 file changed, 39 insertions(+), 62 deletions(-) diff --git a/src/util/virnetlink.c b/src/util/virnetlink.c index 3216765492..f15bb68b02 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: * @@ -857,6 +845,7 @@ virNetlinkEventCallback(int watch, int length; bool handled =3D false; g_autofree struct nlmsghdr *msg =3D NULL; + VIR_LOCK_GUARD lock =3D { NULL }; =20 length =3D nl_recv(srv->netlinknh, &peer, (unsigned char **)&msg, &creds); @@ -869,7 +858,7 @@ virNetlinkEventCallback(int watch, return; } =20 - virNetlinkEventServerLock(srv); + lock =3D virLockGuardLock(&srv->lock); =20 VIR_DEBUG("dispatching to max %d clients, called from event watch %d", (int)srv->handlesCount, watch); @@ -886,8 +875,6 @@ virNetlinkEventCallback(int watch, =20 if (!handled) VIR_DEBUG("event not handled."); - - virNetlinkEventServerUnlock(srv); } =20 /** @@ -916,20 +903,20 @@ 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); =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); - } + /* 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 - server[protocol] =3D NULL; - VIR_FREE(srv->handles); - virNetlinkEventServerUnlock(srv); + server[protocol] =3D NULL; + VIR_FREE(srv->handles); + } =20 virMutexDestroy(&srv->lock); VIR_FREE(srv); @@ -1014,9 +1001,9 @@ int virNetlinkEventServiceLocalPid(unsigned int proto= col) int virNetlinkEventServiceStart(unsigned int protocol, unsigned int groups) { - virNetlinkEventSrvPrivate *srv; + g_autofree virNetlinkEventSrvPrivate *srv =3D NULL; + VIR_LOCK_GUARD lock =3D { NULL }; int fd; - int ret =3D -1; =20 if (protocol >=3D MAX_LINKS) { virReportSystemError(EINVAL, @@ -1031,34 +1018,32 @@ virNetlinkEventServiceStart(unsigned int protocol, = unsigned int groups) =20 srv =3D g_new0(virNetlinkEventSrvPrivate, 1); =20 - if (virMutexInit(&srv->lock) < 0) { - VIR_FREE(srv); + if (virMutexInit(&srv->lock) < 0) return -1; - } =20 - virNetlinkEventServerLock(srv); + lock =3D virLockGuardLock(&srv->lock); =20 /* Allocate a new socket and get fd */ if (!(srv->netlinknh =3D virNetlinkCreateSocket(protocol))) - goto error_locked; + 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; + goto error; } =20 if (groups && nl_socket_add_membership(srv->netlinknh, groups) < 0) { virReportSystemError(errno, "%s", _("cannot add netlink membership")); - goto error_server; + goto error; } =20 if (nl_socket_set_nonblocking(srv->netlinknh)) { virReportSystemError(errno, "%s", _("cannot set netlink socket nonblocking")); - goto error_server; + goto error; } =20 if ((srv->eventwatch =3D virEventAddHandle(fd, @@ -1067,27 +1052,24 @@ virNetlinkEventServiceStart(unsigned int protocol, = unsigned int groups) srv, NULL)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Failed to add netlink event handle watch")); - goto error_server; + goto error; } =20 srv->netlinkfd =3D fd; VIR_DEBUG("netlink event listener on fd: %i running", fd); =20 - ret =3D 0; - server[protocol] =3D srv; + server[protocol] =3D g_steal_pointer(&srv); + return 0; =20 - error_server: - if (ret < 0) { + error: + if (srv->netlinknh) { nl_close(srv->netlinknh); virNetlinkFree(srv->netlinknh); } - error_locked: - virNetlinkEventServerUnlock(srv); - if (ret < 0) { - virMutexDestroy(&srv->lock); - VIR_FREE(srv); - } - return ret; + + virLockGuardUnlock(&lock); + virMutexDestroy(&srv->lock); + return -1; } =20 /** @@ -1114,8 +1096,9 @@ virNetlinkEventAddClient(virNetlinkEventHandleCallbac= k handleCB, unsigned int protocol) { size_t i; - int r, ret =3D -1; + int r; virNetlinkEventSrvPrivate *srv =3D NULL; + VIR_LOCK_GUARD lock =3D { NULL }; =20 if (protocol >=3D MAX_LINKS) return -EINVAL; @@ -1128,7 +1111,7 @@ virNetlinkEventAddClient(virNetlinkEventHandleCallbac= k handleCB, return -1; } =20 - virNetlinkEventServerLock(srv); + lock =3D virLockGuardLock(&srv->lock); =20 VIR_DEBUG("adding client: %d.", nextWatch); =20 @@ -1163,10 +1146,7 @@ virNetlinkEventAddClient(virNetlinkEventHandleCallba= ck handleCB, =20 VIR_DEBUG("added client to loop slot: %d. with macaddr ptr=3D%p", r, m= acaddr); =20 - ret =3D nextWatch++; - - virNetlinkEventServerUnlock(srv); - return ret; + return nextWatch++; } =20 /** @@ -1187,8 +1167,8 @@ virNetlinkEventRemoveClient(int watch, const virMacAd= dr *macaddr, unsigned int protocol) { size_t i; - int ret =3D -1; virNetlinkEventSrvPrivate *srv =3D NULL; + VIR_LOCK_GUARD lock =3D { NULL }; =20 if (protocol >=3D MAX_LINKS) return -EINVAL; @@ -1202,7 +1182,7 @@ virNetlinkEventRemoveClient(int watch, const virMacAd= dr *macaddr, return -1; } =20 - virNetlinkEventServerLock(srv); + lock =3D virLockGuardLock(&srv->lock); =20 for (i =3D 0; i < srv->handlesCount; i++) { if (srv->handles[i].deleted !=3D VIR_NETLINK_HANDLE_VALID) @@ -1215,15 +1195,12 @@ virNetlinkEventRemoveClient(int watch, const virMac= Addr *macaddr, VIR_DEBUG("removed client: %d by %s.", srv->handles[i].watch, watch ? "index" : "mac"); virNetlinkEventRemoveClientPrimitive(i, protocol); - ret =3D 0; - goto cleanup; + 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 Tue May 14 04:38:31 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=1646823867; cv=none; d=zohomail.com; s=zohoarc; b=bGGPkIy61I1D0x11heC98sNSJcRc8DYPJLswViejEcblFYLWVGNUpsAYhgiXVo4BPe/RQ7L0ZLYshCJc3Gffbt1tRz6gYqMZ4Vr5b69+0SpsaTsCUZfV+xHI2RTb1KBpKNBvDCBkqYUdfKeGwIem3Nk/rfT3BpGQk/Bunz6mpio= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646823867; 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=R4GpF6RssK5ls1JpVmYPu7ob+YLdtZ8dlnGfhQHwBH43uhk9auhLfFpj9pZo7bHBHz8h5v9UHGCQ17KoWwroQr/Q0oxHSS9ySfFOFgCVQAhGWdkuCPQJq1Qm6/+8bH+bGYHt+AS8vpTv08uk2tkRbyTekAgfKTYUaZ/ZKU118Ss= 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 1646823867422999.3243164858563; Wed, 9 Mar 2022 03:04:27 -0800 (PST) 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-100-ti80ummHO8i7lGbUasC3xA-1; Wed, 09 Mar 2022 06:04:23 -0500 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 E159485A5A8; Wed, 9 Mar 2022 11:04:19 +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 CAECD40D2820; Wed, 9 Mar 2022 11:04:19 +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 5C2FC196A5FF; Wed, 9 Mar 2022 11:04:19 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id B0720196A5D2 for ; Wed, 9 Mar 2022 11:04:18 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 6F4011059172; Wed, 9 Mar 2022 11:04:18 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.195.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id AD1F81059177; Wed, 9 Mar 2022 11:03:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646823866; 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=XoAGwK6pzozGlecA265BMK1T/Q1Xn1sYS+lFh8Fl3OMZc1GLvHlwgus6sf2v3tx8D3igHZ EXVTzCUykOKg63Fpktv+mAgu5BoV/MhT8XszikyrMASsHBUBfAymDM6I1TRGRA4QWTHrRT cz8HJl1UAxyC/ueWoXns7FKN2Xv+wEQ= X-MC-Unique: ti80ummHO8i7lGbUasC3xA-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 11/12] remote_daemon_stream: Use automatic memory management Date: Wed, 9 Mar 2022 12:02:29 +0100 Message-Id: <20220309110230.24213-12-twiederh@redhat.com> In-Reply-To: <20220309110230.24213-1-twiederh@redhat.com> References: <20220309110230.24213-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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: 1646823869013100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake --- 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 Tue May 14 04:38:31 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=1646823865; cv=none; d=zohomail.com; s=zohoarc; b=IItD52cB1NmzJqNBASvb4O1Rv5/RA94A1g2yZozSEWLJe37V2vKg3PIOkmAy+dkd2Pa0iJqBwtXDMpOlYrhCBZwwj5UjnBcvuny4clhuiROcWm47KFj3fbgKnALUyPiMX9nGDRx45o7xDRfMNaaiC82m5fDyQwTKsjPszuYA/dY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646823865; 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=IsY5XCoAqGq2zWMdSD4s9hq8/LUi+p+DZ/a/hX0OI4xAOVUDtmIvel8YBSa+aFB7upWBEhzo2Oer7eIa/vxxRDBMHttUr6M4i3yIyrpbMnvOii8lShH/kQIQ7I0I1Q9xxkpA3gXRiRC9nOhaRQTQ3N1rAUIYFsOJy9DauBF/ZZk= 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 1646823865635423.0897239229787; Wed, 9 Mar 2022 03:04:25 -0800 (PST) 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-104-HJmNGXSJNOC0YzeukTPR7g-1; Wed, 09 Mar 2022 06:04:23 -0500 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 169741815CFA; Wed, 9 Mar 2022 11:04:21 +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 024BE40CFD01; Wed, 9 Mar 2022 11:04:21 +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 B30C8195FD44; Wed, 9 Mar 2022 11:04:20 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id BBE44195FD41 for ; Wed, 9 Mar 2022 11:04:19 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 7D8D510246F4; Wed, 9 Mar 2022 11:04:19 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.195.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id C60F31059178; Wed, 9 Mar 2022 11:04:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646823864; 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=O/t/p67uTWMilvSufjR1QQMegisBlcVUBH7PLDU/Fr3xdp/0OXzpPD8yOHYl8pTPs/b1lw T7Xf2fI4s4t+iX8eUCoWZuA925dygEcZD7lVfi+cvDuurjJZQwAyjobNZvMk/wnbCiS/Jl gCjw13enwnc6F/Su2pnYDbrp+mEG7QI= X-MC-Unique: HJmNGXSJNOC0YzeukTPR7g-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 12/12] qemu_conf: Use automatic memory management Date: Wed, 9 Mar 2022 12:02:30 +0100 Message-Id: <20220309110230.24213-13-twiederh@redhat.com> In-Reply-To: <20220309110230.24213-1-twiederh@redhat.com> References: <20220309110230.24213-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 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: 1646823866689100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Tim Wiederhake --- 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