From nobody Mon May 13 06:31:28 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=1649775543; cv=none; d=zohomail.com; s=zohoarc; b=H+Oxd2b5dCwRvLMz9q35crhLUwJPmqvS0yCeifAA/uHX5wM5WNPD28y2tE6ouoldXKgZ+5s7n4YNq9UWfCs0Nh4Yd3kqlyiF+0mHE0F5VxTITVTr9elNMzOGaO9a0bDhYwj0eRVkuntwxRebc/LIKbk/LKFTUaWxNGPF4sqE3c4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1649775543; 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=c/wkSE9mhmPllj3beykIrN2w3KuilU9s0Exvl6Tcs94=; b=ElfERvlw6U5jJoNVJyg7/fEFWhN93RjCK955ONL96FKSMiiDtNNsvU0ntRx12gRy417nI2xSzoxFnZs+0EbT15iz29egAES/w462GHtesrivAf63XYtkWKZ7gM4Jz9S2CAZUMgcp1nPLmD61fCoPOkZL8E3tvZCk45AB8Ta5d+4= 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 1649775543576206.04065148734003; Tue, 12 Apr 2022 07:59:03 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-284-Gt9KLMakP7uQCG964tsu9A-1; Tue, 12 Apr 2022 10:58:08 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5236188FA4D; Tue, 12 Apr 2022 14:57:31 +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 3712440F4944; Tue, 12 Apr 2022 14:57:31 +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 F0A4F1940373; Tue, 12 Apr 2022 14:57:30 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 18DB61940365 for ; Tue, 12 Apr 2022 14:57:30 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 03351432033; Tue, 12 Apr 2022 14:57:30 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.194.239]) by smtp.corp.redhat.com (Postfix) with ESMTP id 820AE432036; Tue, 12 Apr 2022 14:57:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649775542; 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=c/wkSE9mhmPllj3beykIrN2w3KuilU9s0Exvl6Tcs94=; b=ivkbeRDbz/hVcB7x+yLe6DY4ahVj7DPs/Avnlx93IaykYptBLailE01fQKlsK7z8tTWSh1 04i2dU0ArGUePeZknSOyIE8U/w2GlQXlWiDnGmIaCmT3mr7pmwOMd3diEECgzsVh5Dyu2L xrQ+0e5PtASJYPDi0PX8IS+/nyGLwMw= X-MC-Unique: Gt9KLMakP7uQCG964tsu9A-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 01/10] virstorageobj: Replace deprecated virHash functions Date: Tue, 12 Apr 2022 16:57:18 +0200 Message-Id: <20220412145727.69564-2-twiederh@redhat.com> In-Reply-To: <20220412145727.69564-1-twiederh@redhat.com> References: <20220412145727.69564-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 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: 1649775545496100002 Content-Type: text/plain; charset="utf-8"; x-default="true" Checking for duplicate / NULL keys beforehand will simplify error handling in a later patch significantly. Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/conf/virstorageobj.c | 47 ++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c index b57c1cb8b2..99aee9ffb4 100644 --- a/src/conf/virstorageobj.c +++ b/src/conf/virstorageobj.c @@ -521,8 +521,8 @@ virStoragePoolObjRemove(virStoragePoolObjList *pools, virObjectUnlock(obj); virObjectRWLockWrite(pools); virObjectLock(obj); - virHashRemoveEntry(pools->objs, uuidstr); - virHashRemoveEntry(pools->objsName, obj->def->name); + g_hash_table_remove(pools->objs, uuidstr); + g_hash_table_remove(pools->objsName, obj->def->name); virObjectUnref(obj); virObjectRWUnlock(pools); } @@ -621,9 +621,9 @@ virStoragePoolObjClearVols(virStoragePoolObj *obj) if (!obj->volumes) return; =20 - virHashRemoveAll(obj->volumes->objsKey); - virHashRemoveAll(obj->volumes->objsName); - virHashRemoveAll(obj->volumes->objsPath); + g_hash_table_remove_all(obj->volumes->objsKey); + g_hash_table_remove_all(obj->volumes->objsName); + g_hash_table_remove_all(obj->volumes->objsPath); } =20 =20 @@ -639,21 +639,19 @@ virStoragePoolObjAddVol(virStoragePoolObj *obj, if (!(volobj =3D virStorageVolObjNew())) goto error; =20 - if (virHashAddEntry(volumes->objsKey, voldef->key, volobj) < 0) + if (!voldef->key || !voldef->name || !voldef->target.path || + g_hash_table_contains(volumes->objsKey, voldef->key) || + g_hash_table_contains(volumes->objsName, voldef->name) || + g_hash_table_contains(volumes->objsPath, voldef->target.path)) goto error; + + g_hash_table_insert(volumes->objsKey, g_strdup(voldef->key), volobj); virObjectRef(volobj); =20 - if (virHashAddEntry(volumes->objsName, voldef->name, volobj) < 0) { - virHashRemoveEntry(volumes->objsKey, voldef->key); - goto error; - } + g_hash_table_insert(volumes->objsName, g_strdup(voldef->name), volobj); virObjectRef(volobj); =20 - if (virHashAddEntry(volumes->objsPath, voldef->target.path, volobj) < = 0) { - virHashRemoveEntry(volumes->objsKey, voldef->key); - virHashRemoveEntry(volumes->objsName, voldef->name); - goto error; - } + g_hash_table_insert(volumes->objsPath, g_strdup(voldef->target.path), = volobj); virObjectRef(volobj); =20 volobj->voldef =3D voldef; @@ -688,9 +686,9 @@ virStoragePoolObjRemoveVol(virStoragePoolObj *obj, =20 virObjectRef(volobj); virObjectLock(volobj); - virHashRemoveEntry(volumes->objsKey, voldef->key); - virHashRemoveEntry(volumes->objsName, voldef->name); - virHashRemoveEntry(volumes->objsPath, voldef->target.path); + g_hash_table_remove(volumes->objsKey, voldef->key); + g_hash_table_remove(volumes->objsName, voldef->name); + g_hash_table_remove(volumes->objsPath, voldef->target.path); virStorageVolObjEndAPI(&volobj); =20 virObjectRWUnlock(volumes); @@ -1582,15 +1580,18 @@ virStoragePoolObjListAdd(virStoragePoolObjList *poo= ls, goto error; =20 virUUIDFormat((*def)->uuid, uuidstr); - if (virHashAddEntry(pools->objs, uuidstr, obj) < 0) + + if (!(*def)->name || + g_hash_table_contains(pools->objs, uuidstr) || + g_hash_table_contains(pools->objsName, (*def)->name)) goto error; + + g_hash_table_insert(pools->objs, g_strdup(uuidstr), obj); virObjectRef(obj); =20 - if (virHashAddEntry(pools->objsName, (*def)->name, obj) < 0) { - virHashRemoveEntry(pools->objs, uuidstr); - goto error; - } + g_hash_table_insert(pools->objsName, g_strdup((*def)->name), obj); virObjectRef(obj); + obj->def =3D g_steal_pointer(def); virObjectRWUnlock(pools); return obj; --=20 2.31.1 From nobody Mon May 13 06:31:28 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=1649775490; cv=none; d=zohomail.com; s=zohoarc; b=EMeGVdJ8ZSqlG/pyO1vhTLNJpISdgJSru9XUET5NL1wmw3AjcyVYCl47JpdIzVom4KVNySoWdS1tND8gQcezSwKlhb3c348sIbBw5I0R1hq3fO8GqW/TPbssOBZx0xI4PK7sr3AksU2a9KaoVl2ldEPiPy3PNkPXlQiup5P8Ui4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1649775490; 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=Q/naSVd8di90dWGEDbMAJq+whWbWipu6da/v9LLB1Zk=; b=MWsZcBpggrzNU3iGjsB0U/F0YNvmZFCRDxoa0yYf4f1z7rMnrPhYpfke3s3yJJj01ynTtf35l5k7U+aqIPF1OF2+IOtVSIhQiDzX2uTALkB3HHUACtPiUoU593SaCMRXm1BnD0AxBGjTdKRt7ymJo4RWrPxCofrHX1xDUUNPytg= 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 1649775490006360.0034376813454; Tue, 12 Apr 2022 07:58:10 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-508-b4xHJXicPc2wWQPUaTtSYg-1; Tue, 12 Apr 2022 10:58:05 -0400 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 76CD08853DF; Tue, 12 Apr 2022 14:57:33 +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 5C25A482CFE; Tue, 12 Apr 2022 14:57:33 +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 E9B65194036A; Tue, 12 Apr 2022 14:57:32 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id E300C1940365 for ; Tue, 12 Apr 2022 14:57:30 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id C45BD416378; Tue, 12 Apr 2022 14:57:30 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.194.239]) by smtp.corp.redhat.com (Postfix) with ESMTP id 43403432036; Tue, 12 Apr 2022 14:57:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649775489; 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=Q/naSVd8di90dWGEDbMAJq+whWbWipu6da/v9LLB1Zk=; b=VW9VKWR/zEQBtY+4D82FENcP+OmnSWUYIVfxEhfM0oyxwQeuyy84L61wO3GKA90iNAibFN lCdWhptcD2gxtbBvuZidfaAWH5eTuJpnrA/7uoR5J2ftkB0SDJYS0iQLvxo9TtZuaxxt21 uftT5e6NY0KU0qz+rKSNbyOiYR5E8zM= X-MC-Unique: b4xHJXicPc2wWQPUaTtSYg-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 02/10] virStoragePoolObjAddVol: Simplify error path Date: Tue, 12 Apr 2022 16:57:19 +0200 Message-Id: <20220412145727.69564-3-twiederh@redhat.com> In-Reply-To: <20220412145727.69564-1-twiederh@redhat.com> References: <20220412145727.69564-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 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: 1649775491290100004 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/conf/virstorageobj.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c index 99aee9ffb4..1ecf35640c 100644 --- a/src/conf/virstorageobj.c +++ b/src/conf/virstorageobj.c @@ -636,14 +636,18 @@ virStoragePoolObjAddVol(virStoragePoolObj *obj, =20 virObjectRWLockWrite(volumes); =20 - if (!(volobj =3D virStorageVolObjNew())) - goto error; - if (!voldef->key || !voldef->name || !voldef->target.path || g_hash_table_contains(volumes->objsKey, voldef->key) || g_hash_table_contains(volumes->objsName, voldef->name) || - g_hash_table_contains(volumes->objsPath, voldef->target.path)) - goto error; + g_hash_table_contains(volumes->objsPath, voldef->target.path)) { + virObjectRWUnlock(volumes); + return -1; + } + + if (!(volobj =3D virStorageVolObjNew())) { + virObjectRWUnlock(volumes); + return -1; + } =20 g_hash_table_insert(volumes->objsKey, g_strdup(voldef->key), volobj); virObjectRef(volobj); @@ -655,14 +659,10 @@ virStoragePoolObjAddVol(virStoragePoolObj *obj, virObjectRef(volobj); =20 volobj->voldef =3D voldef; - virObjectRWUnlock(volumes); - virStorageVolObjEndAPI(&volobj); - return 0; =20 - error: virStorageVolObjEndAPI(&volobj); virObjectRWUnlock(volumes); - return -1; + return 0; } =20 =20 --=20 2.31.1 From nobody Mon May 13 06:31:28 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=1649775543; cv=none; d=zohomail.com; s=zohoarc; b=F1zPfBBQXsPYUo0LabOKqcgb2poE0ZXSnVjmNg0ov38h0NUnmvA4bd6zU6TeonQsr0eb5r+vMPMmISZv+jafVJjjGmrL5efyFWdMz/vcfHa81F68MQ1gN/o4dsEFEfvgEHDPPS/7wt8roZZKFEjYP4i1u+slMMMoC5tvnueIrLs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1649775543; 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=9htCMYVquG8YjK0l8ChBf242P6JJwO/QgJftvknZyNQ=; b=BpEOpt7N8vKVoq9vNsIBN/RSCNCBPnMzd29vKDvjcxcMvStSaaoj1xfdDzuT8AMGCsnMpIEVpPKneYIQKIeuBTzZ+84sxkRmxiMoUYK+rKvIdSrEsXqE5ILHSvxAaA+zdO5w1s3gW7Itp5vQAAaP7dTHBjBRRIklhLQ2kHQj65I= 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 1649775543347716.3016058016475; Tue, 12 Apr 2022 07:59:03 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-517-r-98yEhaPyCwcN9_m1d3UQ-1; Tue, 12 Apr 2022 10:58:08 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 082CE3811F4C; Tue, 12 Apr 2022 14:57:34 +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 DB1C5C44B1D; Tue, 12 Apr 2022 14:57:33 +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 40D62193F505; Tue, 12 Apr 2022 14:57:33 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id AD4201940365 for ; Tue, 12 Apr 2022 14:57:31 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 83A644AE6E9; Tue, 12 Apr 2022 14:57:31 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.194.239]) by smtp.corp.redhat.com (Postfix) with ESMTP id 094CF4AE6E8; Tue, 12 Apr 2022 14:57:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649775542; 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=9htCMYVquG8YjK0l8ChBf242P6JJwO/QgJftvknZyNQ=; b=Zs4u5sykSV43Fn3jCTgzsJaqaT7MsD2Wow21jeu6p4LVp6n44f4oZSqBRIp3Gi+IhII+jF BN0qvmHxyCwclLZ4ppi2nMZ08R3zAnvTutbUQrbENmZJEIbsJd/Ko2FfR8R2/ZpcEBQSW0 Eyp2VWdkmvTgi32J0giHM7OxMBgg5Xg= X-MC-Unique: r-98yEhaPyCwcN9_m1d3UQ-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 03/10] virStorageVolObjEndAPI: Remove Date: Tue, 12 Apr 2022 16:57:20 +0200 Message-Id: <20220412145727.69564-4-twiederh@redhat.com> In-Reply-To: <20220412145727.69564-1-twiederh@redhat.com> References: <20220412145727.69564-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 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: 1649775545490100001 Content-Type: text/plain; charset="utf-8"; x-default="true" This allows a later patch to replace virObjectLock/Unlock pairs with automatic mutex management code. Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/conf/virstorageobj.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c index 1ecf35640c..108ae0aeb1 100644 --- a/src/conf/virstorageobj.c +++ b/src/conf/virstorageobj.c @@ -138,17 +138,6 @@ virStorageVolObjNew(void) } =20 =20 -static void -virStorageVolObjEndAPI(virStorageVolObj **obj) -{ - if (!*obj) - return; - - virObjectUnlock(*obj); - g_clear_pointer(obj, virObjectUnref); -} - - static void virStorageVolObjDispose(void *opaque) { @@ -660,7 +649,8 @@ virStoragePoolObjAddVol(virStoragePoolObj *obj, =20 volobj->voldef =3D voldef; =20 - virStorageVolObjEndAPI(&volobj); + virObjectUnlock(volobj); + virObjectUnref(volobj); virObjectRWUnlock(volumes); return 0; } @@ -689,8 +679,8 @@ virStoragePoolObjRemoveVol(virStoragePoolObj *obj, g_hash_table_remove(volumes->objsKey, voldef->key); g_hash_table_remove(volumes->objsName, voldef->name); g_hash_table_remove(volumes->objsPath, voldef->target.path); - virStorageVolObjEndAPI(&volobj); - + virObjectUnlock(volobj); + virObjectUnref(volobj); virObjectRWUnlock(volumes); } =20 --=20 2.31.1 From nobody Mon May 13 06:31:28 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=1649775489; cv=none; d=zohomail.com; s=zohoarc; b=eRMFsHzJqLGyMIIaq9toDUAnGvysKe14buVfpDbFrw7PKkcvQT17AaYX/njouWKTv3gmPGV9u6cQC/xeJvmxuuQFKse/IL9fkI38wcssRQOC7xn8r+fwAHLJHAev6vaRZonyo42qVqFD5EBSjEhR1oMUWAKc1WFNfbVNFlOckoI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1649775489; 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=3U9UFcWQW37sZYwh6LAK8uE16aQ+5qZ4bUikWOr3/94=; b=n7zMwqRWuPAWkXD8TK4BPU/wZPKhi3P1iU8BVyNuI2pHrR431Lh8nt+B2U8Biw3exD4BugBNMdPTRo2wy5WelIyPADJF06dOyK84vTnnGA24VtszRulGbGTq/gMddUuUdL/LuzTdyze6iflpZ4YJnzgyd8VqaoRMaj3Fp3Fe30U= 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 1649775489872326.86607289651784; Tue, 12 Apr 2022 07:58:09 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-158-l_GEM-qDNXyf1nBgSXLSkw-1; Tue, 12 Apr 2022 10:58:07 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1418D100F81E; Tue, 12 Apr 2022 14:57:34 +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 DBA89145BEEC; Tue, 12 Apr 2022 14:57:33 +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 4523F193F507; Tue, 12 Apr 2022 14:57:33 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 54E161940365 for ; Tue, 12 Apr 2022 14:57:32 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 47911432045; Tue, 12 Apr 2022 14:57:32 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.194.239]) by smtp.corp.redhat.com (Postfix) with ESMTP id C5D264292CD; Tue, 12 Apr 2022 14:57:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649775488; 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=3U9UFcWQW37sZYwh6LAK8uE16aQ+5qZ4bUikWOr3/94=; b=bAnNXGiRsjZe2fOFz3P5QieKC8f6uiQC9ChTKpwwAmMzuyrqGeNGk5MDD8Nsf819BISw+6 zatthxIERwm4nGi5cbHoKpj6sWd+GCfjugkYwDRnuKRmPPVEo3IBeV+vi3QpTLvHLcuV4n 0TLBEAGE+KM+odV5P0BknqXxWmOsYB4= X-MC-Unique: l_GEM-qDNXyf1nBgSXLSkw-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 04/10] virStorageVolObjNew: Move locking to usage site Date: Tue, 12 Apr 2022 16:57:21 +0200 Message-Id: <20220412145727.69564-5-twiederh@redhat.com> In-Reply-To: <20220412145727.69564-1-twiederh@redhat.com> References: <20220412145727.69564-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 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: 1649776394062100001 Content-Type: text/plain; charset="utf-8"; x-default="true" This allows a later patch to replace virObjectLock/Unlock pairs with automatic mutex management code. Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/conf/virstorageobj.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c index 108ae0aeb1..c837f96ae6 100644 --- a/src/conf/virstorageobj.c +++ b/src/conf/virstorageobj.c @@ -125,16 +125,10 @@ VIR_ONCE_GLOBAL_INIT(virStorageVolObj); static virStorageVolObj * virStorageVolObjNew(void) { - virStorageVolObj *obj; - if (virStorageVolObjInitialize() < 0) return NULL; =20 - if (!(obj =3D virObjectLockableNew(virStorageVolObjClass))) - return NULL; - - virObjectLock(obj); - return obj; + return virObjectLockableNew(virStorageVolObjClass); } =20 =20 @@ -638,6 +632,8 @@ virStoragePoolObjAddVol(virStoragePoolObj *obj, return -1; } =20 + virObjectLock(volobj); + g_hash_table_insert(volumes->objsKey, g_strdup(voldef->key), volobj); virObjectRef(volobj); =20 --=20 2.31.1 From nobody Mon May 13 06:31:28 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=1649775552; cv=none; d=zohomail.com; s=zohoarc; b=HRyJv/eKSI6ynzoEIdZDP6nw+I3C9oy35N1+pfkVTPSl2CLuLlOSgC4n1bAPK/ZuVLCDWNjhkORk+DYmqiP2KmtaFXWMKDE3WiyZ72Aqdhaaq6RDCULOxnqnlT4jVSmeF2GUsU60cNd3YwvFwVFHS2SKZ37Uxqrbg3SSL8MYFR4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1649775552; 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=3LGq/wbQYloVDnNXFimW3kQvED0+v9+vx0s4ndl9rZk=; b=Zkr5+CAknORAMq7QcueSEbDOhdK5qX1ECaaA2zzrPxbNU/3awZFloxOJ1+SxZ4rVn8yKZxJKKRbZjQ+mJP19Hvm/rjr1/41IHXsPHUEDmjryeG5XwliK3C6/gB6ibV3LrGGv+pYoXriMdGktkk50EmTj3/ourxDnW7odFrqAObo= 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 1649775552351257.7064054471367; Tue, 12 Apr 2022 07:59:12 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-561-RZAaiiGWNIez7QCEJwCQHw-1; Tue, 12 Apr 2022 10:58:07 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 7DEA4102FCA8; Tue, 12 Apr 2022 14:57:35 +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 62666C44CFA; Tue, 12 Apr 2022 14:57:35 +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 B71FE193F6E0; Tue, 12 Apr 2022 14:57:34 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 37983193F6EA for ; Tue, 12 Apr 2022 14:57:33 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 1BFE0406793; Tue, 12 Apr 2022 14:57:33 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.194.239]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8F74B43204E; Tue, 12 Apr 2022 14:57:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649775551; 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=3LGq/wbQYloVDnNXFimW3kQvED0+v9+vx0s4ndl9rZk=; b=jGRG0nQMPHQ6mJ3omYSKT/Kvo9twLl9uou2MTcnlgkVaE0q6A1GR8t7ol4cWDKM1tkJWls X9xaE2YJjaUUfAq/H6V50gVTOQCAGngsvmc2szfsuhJfsSxEXr64PtP5PC/DbfU+dZ+3uA Gq11nBJ0lCP3RiT5870F4ehzhtKTSR0= X-MC-Unique: RZAaiiGWNIez7QCEJwCQHw-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 05/10] virstorageobject: Use automatic mutex management Date: Tue, 12 Apr 2022 16:57:22 +0200 Message-Id: <20220412145727.69564-6-twiederh@redhat.com> In-Reply-To: <20220412145727.69564-1-twiederh@redhat.com> References: <20220412145727.69564-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 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: 1649775553535100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/conf/virstorageobj.c | 116 ++++++++++++++------------------------- 1 file changed, 42 insertions(+), 74 deletions(-) diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c index c837f96ae6..fe868d25fa 100644 --- a/src/conf/virstorageobj.c +++ b/src/conf/virstorageobj.c @@ -455,11 +455,11 @@ virStoragePoolObjListSearchCb(const void *payload, virStoragePoolObj *obj =3D (virStoragePoolObj *) payload; struct _virStoragePoolObjListSearchData *data =3D (struct _virStoragePoolObjListSearchData *)opaque; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(obj); =20 - virObjectLock(obj); if (data->searcher(obj, data->opaque)) return 1; - virObjectUnlock(obj); + return 0; } =20 @@ -632,20 +632,19 @@ virStoragePoolObjAddVol(virStoragePoolObj *obj, return -1; } =20 - virObjectLock(volobj); + VIR_WITH_OBJECT_LOCK_GUARD(volobj) { + g_hash_table_insert(volumes->objsKey, g_strdup(voldef->key), volob= j); + virObjectRef(volobj); =20 - g_hash_table_insert(volumes->objsKey, g_strdup(voldef->key), volobj); - virObjectRef(volobj); + g_hash_table_insert(volumes->objsName, g_strdup(voldef->name), vol= obj); + virObjectRef(volobj); =20 - g_hash_table_insert(volumes->objsName, g_strdup(voldef->name), volobj); - virObjectRef(volobj); - - g_hash_table_insert(volumes->objsPath, g_strdup(voldef->target.path), = volobj); - virObjectRef(volobj); + g_hash_table_insert(volumes->objsPath, g_strdup(voldef->target.pat= h), volobj); + virObjectRef(volobj); =20 - volobj->voldef =3D voldef; + volobj->voldef =3D voldef; + } =20 - virObjectUnlock(volobj); virObjectUnref(volobj); virObjectRWUnlock(volumes); return 0; @@ -671,11 +670,11 @@ virStoragePoolObjRemoveVol(virStoragePoolObj *obj, voldef->name, obj->def->name); =20 virObjectRef(volobj); - virObjectLock(volobj); - g_hash_table_remove(volumes->objsKey, voldef->key); - g_hash_table_remove(volumes->objsName, voldef->name); - g_hash_table_remove(volumes->objsPath, voldef->target.path); - virObjectUnlock(volobj); + VIR_WITH_OBJECT_LOCK_GUARD(volobj) { + g_hash_table_remove(volumes->objsKey, voldef->key); + g_hash_table_remove(volumes->objsName, voldef->name); + g_hash_table_remove(volumes->objsPath, voldef->target.path); + } virObjectUnref(volobj); virObjectRWUnlock(volumes); } @@ -704,16 +703,14 @@ virStoragePoolObjForEachVolumeCb(void *payload, const char *name G_GNUC_UNUSED, void *opaque) { - int ret =3D 0; virStorageVolObj *volobj =3D payload; struct _virStoragePoolObjForEachVolData *data =3D opaque; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(volobj); =20 - virObjectLock(volobj); if (data->iter(volobj->voldef, data->opaque) < 0) - ret =3D -1; - virObjectUnlock(volobj); + return -1; =20 - return ret; + return 0; } =20 =20 @@ -746,14 +743,12 @@ virStoragePoolObjSearchVolumeCb(const void *payload, virStorageVolObj *volobj =3D (virStorageVolObj *) payload; struct _virStoragePoolObjSearchVolData *data =3D (struct _virStoragePoolObjSearchVolData *) opaque; - int found =3D 0; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(volobj); =20 - virObjectLock(volobj); if (data->iter(volobj->voldef, data->opaque)) - found =3D 1; - virObjectUnlock(volobj); + return 1; =20 - return found; + return 0; } =20 =20 @@ -842,17 +837,12 @@ virStoragePoolObjNumOfVolumesCb(void *payload, { virStorageVolObj *volobj =3D payload; struct _virStorageVolObjCountData *data =3D opaque; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(volobj); =20 - virObjectLock(volobj); - - if (data->filter && - !data->filter(data->conn, data->pooldef, volobj->voldef)) - goto cleanup; + if (data->filter && !data->filter(data->conn, data->pooldef, volobj->v= oldef)) + return 0; =20 data->count++; - - cleanup: - virObjectUnlock(volobj); return 0; } =20 @@ -891,6 +881,7 @@ virStoragePoolObjVolumeGetNamesCb(void *payload, { virStorageVolObj *volobj =3D payload; struct _virStorageVolObjNameData *data =3D opaque; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(volobj); =20 if (data->error) return 0; @@ -898,19 +889,13 @@ virStoragePoolObjVolumeGetNamesCb(void *payload, if (data->maxnames >=3D 0 && data->nnames =3D=3D data->maxnames) return 0; =20 - virObjectLock(volobj); - - if (data->filter && - !data->filter(data->conn, data->pooldef, volobj->voldef)) - goto cleanup; + if (data->filter && !data->filter(data->conn, data->pooldef, volobj->v= oldef)) + return 0; =20 if (data->names) data->names[data->nnames] =3D g_strdup(volobj->voldef->name); =20 data->nnames++; - - cleanup: - virObjectUnlock(volobj); return 0; } =20 @@ -961,30 +946,25 @@ virStoragePoolObjVolumeListExportCallback(void *paylo= ad, virStorageVolObj *volobj =3D payload; virStoragePoolObjVolumeListExportData *data =3D opaque; virStorageVolPtr vol =3D NULL; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(volobj); =20 if (data->error) return 0; =20 - virObjectLock(volobj); - - if (data->filter && - !data->filter(data->conn, data->pooldef, volobj->voldef)) - goto cleanup; + if (data->filter && !data->filter(data->conn, data->pooldef, volobj->v= oldef)) + return 0; =20 if (data->vols) { if (!(vol =3D virGetStorageVol(data->conn, data->pooldef->name, volobj->voldef->name, volobj->voldef-= >key, NULL, NULL))) { data->error =3D true; - goto cleanup; + return 0; } data->vols[data->nvols] =3D vol; } =20 data->nvols++; - - cleanup: - virObjectUnlock(volobj); return 0; } =20 @@ -1799,19 +1779,15 @@ virStoragePoolObjNumOfStoragePoolsCb(void *payload, { virStoragePoolObj *obj =3D payload; struct _virStoragePoolCountData *data =3D opaque; - - virObjectLock(obj); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(obj); =20 if (data->filter && !data->filter(data->conn, obj->def)) - goto cleanup; + return 0; =20 if (data->wantActive !=3D virStoragePoolObjIsActive(obj)) - goto cleanup; + return 0; =20 data->count++; - - cleanup: - virObjectUnlock(obj); return 0; } =20 @@ -1851,6 +1827,7 @@ virStoragePoolObjGetNamesCb(void *payload, { virStoragePoolObj *obj =3D payload; struct _virStoragePoolNameData *data =3D opaque; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(obj); =20 if (data->error) return 0; @@ -1858,21 +1835,16 @@ virStoragePoolObjGetNamesCb(void *payload, if (data->maxnames >=3D 0 && data->nnames =3D=3D data->maxnames) return 0; =20 - virObjectLock(obj); - if (data->filter && !data->filter(data->conn, obj->def)) - goto cleanup; + return 0; =20 if (data->wantActive !=3D virStoragePoolObjIsActive(obj)) - goto cleanup; + return 0; =20 if (data->names) data->names[data->nnames] =3D g_strdup(obj->def->name); =20 data->nnames++; - - cleanup: - virObjectUnlock(obj); return 0; } =20 @@ -1994,31 +1966,27 @@ virStoragePoolObjListExportCallback(void *payload, virStoragePoolObj *obj =3D payload; virStoragePoolObjListExportData *data =3D opaque; virStoragePoolPtr pool =3D NULL; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(obj); =20 if (data->error) return 0; =20 - virObjectLock(obj); - if (data->filter && !data->filter(data->conn, obj->def)) - goto cleanup; + return 0; =20 if (!virStoragePoolObjMatch(obj, data->flags)) - goto cleanup; + return 0; =20 if (data->pools) { if (!(pool =3D virGetStoragePool(data->conn, obj->def->name, obj->def->uuid, NULL, NULL))) { data->error =3D true; - goto cleanup; + return 0; } data->pools[data->nPools] =3D pool; } =20 data->nPools++; - - cleanup: - virObjectUnlock(obj); return 0; } =20 --=20 2.31.1 From nobody Mon May 13 06:31:28 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=1649775496; cv=none; d=zohomail.com; s=zohoarc; b=i5f8N4V6Xry29AV2VMeshasq+OOSCuvWtw6BECWUgL6IOHPCmY9ZiHLPXevu2sE9hfUJ1Agn/7MB1nXavy1W/To0J2tlA3dbg+l9imh59NEazdM9DzJsK/r9A3D6MIxx0H+KjuY4fBxQeF9MjfdWvll8ATyChgWxfYxPfctfGsk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1649775496; 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=1RqR9rhyHd3xLX9Jv32D/xuiOBwMeh0QuB4OZ7ZgdZE=; b=DaCireVd17UcDkkVFfO0isLLYrqPSK5ST/EFpWStUmxZtcBPYHG7SHCE5VHFCUVLagYXfrUCTZrFkTdU1jA55KpoB3yZ9TPA46XdRgZAy2CmmQRXqGtE15OBmhR10sZgHT1UOVdbtO4rPZb5e47qXh6wUzk28SoFaWzcGDtPBLM= 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 1649775496419752.1661470661902; Tue, 12 Apr 2022 07:58:16 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-551-tTKUU3JWMnO5ikMk5tuJYw-1; Tue, 12 Apr 2022 10:58:10 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3F1A88AD8BD; Tue, 12 Apr 2022 14:57:36 +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 DE51B145BF0C; Tue, 12 Apr 2022 14:57:35 +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 A93071940373; Tue, 12 Apr 2022 14:57:35 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 34C181940373 for ; Tue, 12 Apr 2022 14:57:34 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id EB363432041; Tue, 12 Apr 2022 14:57:33 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.194.239]) by smtp.corp.redhat.com (Postfix) with ESMTP id 66938416375; Tue, 12 Apr 2022 14:57:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649775495; 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=1RqR9rhyHd3xLX9Jv32D/xuiOBwMeh0QuB4OZ7ZgdZE=; b=Hy+XGAeVSlaLKSwtoIzrkv6r4p8vbu45/G1KCm+9HrPGfOYPlHOQs1bXT+6nA87v0tmOGc Z4Ijt6M4DnnjUeuXsuXHRIh1MILnrgM3iyAF7acpWu0k5G5Yp3FbnFK7qBbmBn8oFFsQD8 sf93rYRJIsHBJtTDmqNJ7psn+TC7G7U= X-MC-Unique: tTKUU3JWMnO5ikMk5tuJYw-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 06/10] virNetServerProcessClients: Remove goto Date: Tue, 12 Apr 2022 16:57:23 +0200 Message-Id: <20220412145727.69564-7-twiederh@redhat.com> In-Reply-To: <20220412145727.69564-1-twiederh@redhat.com> References: <20220412145727.69564-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 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: 1649775497262100003 Content-Type: text/plain; charset="utf-8"; x-default="true" This gets rid of the goto and prepares the function for automatic mutex management. Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/rpc/virnetserver.c | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c index d9430a2cfa..7824d121cd 100644 --- a/src/rpc/virnetserver.c +++ b/src/rpc/virnetserver.c @@ -960,13 +960,19 @@ virNetServerHasClients(virNetServer *srv) void virNetServerProcessClients(virNetServer *srv) { - size_t i; - virNetServerClient *client; + size_t i =3D 0; =20 - virObjectLock(srv); + while (true) { + virNetServerClient *client; + bool removed =3D false; + + virObjectLock(srv); + + if (i >=3D srv->nclients) { + virObjectUnlock(srv); + return; + } =20 - reprocess: - for (i =3D 0; i < srv->nclients; i++) { client =3D srv->clients[i]; virObjectLock(client); if (virNetServerClientWantCloseLocked(client)) @@ -974,24 +980,26 @@ virNetServerProcessClients(virNetServer *srv) =20 if (virNetServerClientIsClosedLocked(client)) { VIR_DELETE_ELEMENT(srv->clients, i, srv->nclients); + removed =3D true; =20 /* Update server authentication tracking */ virNetServerSetClientAuthCompletedLocked(srv, client); - virObjectUnlock(client); - virNetServerCheckLimits(srv); + } + + virObjectUnlock(client); =20 + if (removed) { + i =3D 0; virObjectUnlock(srv); virObjectUnref(client); - virObjectLock(srv); - - goto reprocess; - } else { - virObjectUnlock(client); + continue; } - } =20 - virObjectUnlock(srv); + i++; + + virObjectUnlock(srv); + } } =20 =20 --=20 2.31.1 From nobody Mon May 13 06:31:28 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=1649775492; cv=none; d=zohomail.com; s=zohoarc; b=eXF/lDFW9V7zJfHdzikr0/omXE7NFxY9ZzjQ47THAK/QfGno6pIa0I7/HgWtSR16qzt3QmT9bNpgiLZW5/ZMnaB9Ttd1qkAfo52XaDzriU1ZlWaCKSYsEnfMv8DAOhS2T1ZwcmBjH7rfKUYa7PxNVMzVRmqSYcjstoKHR3KWhsQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1649775492; 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=gQHsc2bgUSSshCyP9EOIPId0ZO+bhqJRD5H3GXa7DkI=; b=hX9RGqtg8tDSk4gtgUDh0mGbVKi/kcZwV3I23wl5MxN268FXXACqeRYSaCf1KS5uLKw0yKgGV4OosXvgM2l8NaoG6AWI2q5kpJblkyGGY/JDSU6fbATAixa1M9zZn46nwShtyf+6V9eKPQqOX05sBNypeAPSrQIhe7OVHKEVpF8= 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 1649775492642922.5084829167665; Tue, 12 Apr 2022 07:58:12 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-328-3jSF0_mOPx2uBlg64wzFxw-1; Tue, 12 Apr 2022 10:58:08 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5B77F86B8DD; Tue, 12 Apr 2022 14:57:37 +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 42A36C50949; Tue, 12 Apr 2022 14:57:37 +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 0ABEA193F6E0; Tue, 12 Apr 2022 14:57:37 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 0348F193F509 for ; Tue, 12 Apr 2022 14:57:35 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id E7E1540BAE6; Tue, 12 Apr 2022 14:57:34 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.194.239]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5DD8F43203F; Tue, 12 Apr 2022 14:57:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649775491; 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=gQHsc2bgUSSshCyP9EOIPId0ZO+bhqJRD5H3GXa7DkI=; b=SSO15+UsAG95I0DpaDQa1NZ8WosGhPIdx6yyiXtYEK8BA1jRpFRq09AHSH8X39V26CB3a+ mq7DPj0QdtyMs7W5xg9cNso67CimeLL1UDuqZPY1DjxBwecsdytmmBLKkWP0GvMlqinXMH 4PeOciS4Ye3ou/0HWWK32HDMNNxjhcA= X-MC-Unique: 3jSF0_mOPx2uBlg64wzFxw-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 07/10] virnetserver: Use automatic mutex management Date: Tue, 12 Apr 2022 16:57:24 +0200 Message-Id: <20220412145727.69564-8-twiederh@redhat.com> In-Reply-To: <20220412145727.69564-1-twiederh@redhat.com> References: <20220412145727.69564-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 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: 1649775493463100007 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/rpc/virnetserver.c | 277 +++++++++++++++-------------------------- 1 file changed, 100 insertions(+), 177 deletions(-) diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c index 7824d121cd..9b333f1a6c 100644 --- a/src/rpc/virnetserver.c +++ b/src/rpc/virnetserver.c @@ -97,13 +97,9 @@ VIR_ONCE_GLOBAL_INIT(virNetServer); unsigned long long virNetServerNextClientID(virNetServer *srv) { - unsigned long long val; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 - virObjectLock(srv); - val =3D srv->next_client_id++; - virObjectUnlock(srv); - - return val; + return srv->next_client_id++; } =20 =20 @@ -208,13 +204,13 @@ virNetServerDispatchNewMessage(virNetServerClient *cl= ient, VIR_DEBUG("server=3D%p client=3D%p message=3D%p", srv, client, msg); =20 - virObjectLock(srv); - prog =3D virNetServerGetProgramLocked(srv, msg); - /* we can unlock @srv since @prog can only become invalid in case - * of disposing @srv, but let's grab a ref first to ensure nothing - * disposes of it before we use it. */ - virObjectRef(srv); - virObjectUnlock(srv); + VIR_WITH_OBJECT_LOCK_GUARD(srv) { + prog =3D virNetServerGetProgramLocked(srv, msg); + /* we can unlock @srv since @prog can only become invalid in case + * of disposing @srv, but let's grab a ref first to ensure nothing + * disposes of it before we use it. */ + virObjectRef(srv); + } =20 if (virThreadPoolGetMaxWorkers(srv->workers) > 0) { virNetServerJob *job; @@ -304,35 +300,28 @@ int virNetServerAddClient(virNetServer *srv, virNetServerClient *client) { - virObjectLock(srv); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 if (virNetServerClientInit(client) < 0) - goto error; + return -1; =20 VIR_EXPAND_N(srv->clients, srv->nclients, 1); srv->clients[srv->nclients-1] =3D virObjectRef(client); =20 - virObjectLock(client); - if (virNetServerClientIsAuthPendingLocked(client)) - virNetServerTrackPendingAuthLocked(srv); - virObjectUnlock(client); + VIR_WITH_OBJECT_LOCK_GUARD(client) { + if (virNetServerClientIsAuthPendingLocked(client)) + virNetServerTrackPendingAuthLocked(srv); + } =20 virNetServerCheckLimits(srv); =20 - virNetServerClientSetDispatcher(client, - virNetServerDispatchNewMessage, - srv); + virNetServerClientSetDispatcher(client, virNetServerDispatchNewMessage= , srv); =20 if (virNetServerClientInitKeepAlive(client, srv->keepaliveInterval, srv->keepaliveCount) < 0) - goto error; + return -1; =20 - virObjectUnlock(srv); return 0; - - error: - virObjectUnlock(srv); - return -1; } =20 =20 @@ -565,65 +554,62 @@ virNetServerPreExecRestart(virNetServer *srv) g_autoptr(virJSONValue) clients =3D virJSONValueNewArray(); g_autoptr(virJSONValue) services =3D virJSONValueNewArray(); size_t i; - - virObjectLock(srv); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 if (virJSONValueObjectAppendNumberUint(object, "min_workers", virThreadPoolGetMinWorkers(srv-= >workers)) < 0) - goto error; + return NULL; + if (virJSONValueObjectAppendNumberUint(object, "max_workers", virThreadPoolGetMaxWorkers(srv-= >workers)) < 0) - goto error; + return NULL; + if (virJSONValueObjectAppendNumberUint(object, "priority_workers", virThreadPoolGetPriorityWorkers= (srv->workers)) < 0) - goto error; + return NULL; =20 if (virJSONValueObjectAppendNumberUint(object, "max_clients", srv->ncl= ients_max) < 0) - goto error; + return NULL; + if (virJSONValueObjectAppendNumberUint(object, "max_anonymous_clients", srv->nclients_unauth_max) < 0) - goto error; + return NULL; =20 if (virJSONValueObjectAppendNumberUint(object, "keepaliveInterval", sr= v->keepaliveInterval) < 0) - goto error; + return NULL; + if (virJSONValueObjectAppendNumberUint(object, "keepaliveCount", srv->= keepaliveCount) < 0) - goto error; + return NULL; =20 if (virJSONValueObjectAppendNumberUlong(object, "next_client_id", srv->next_client_id) < 0) - goto error; + return NULL; =20 for (i =3D 0; i < srv->nservices; i++) { g_autoptr(virJSONValue) child =3D NULL; if (!(child =3D virNetServerServicePreExecRestart(srv->services[i]= ))) - goto error; + return NULL; =20 if (virJSONValueArrayAppend(services, &child) < 0) - goto error; + return NULL; } =20 if (virJSONValueObjectAppend(object, "services", &services) < 0) - goto error; + return NULL; =20 for (i =3D 0; i < srv->nclients; i++) { g_autoptr(virJSONValue) child =3D NULL; if (!(child =3D virNetServerClientPreExecRestart(srv->clients[i]))) - goto error; + return NULL; =20 if (virJSONValueArrayAppend(clients, &child) < 0) - goto error; + return NULL; } =20 if (virJSONValueObjectAppend(object, "clients", &clients) < 0) - goto error; - - virObjectUnlock(srv); + return NULL; =20 return g_steal_pointer(&object); - - error: - virObjectUnlock(srv); - return NULL; } =20 =20 @@ -631,16 +617,12 @@ int virNetServerAddService(virNetServer *srv, virNetServerService *svc) { - virObjectLock(srv); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 VIR_EXPAND_N(srv->services, srv->nservices, 1); srv->services[srv->nservices-1] =3D virObjectRef(svc); =20 - virNetServerServiceSetDispatcher(svc, - virNetServerDispatchNewClient, - srv); - - virObjectUnlock(srv); + virNetServerServiceSetDispatcher(svc, virNetServerDispatchNewClient, s= rv); return 0; } =20 @@ -795,12 +777,10 @@ int virNetServerAddProgram(virNetServer *srv, virNetServerProgram *prog) { - virObjectLock(srv); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 VIR_EXPAND_N(srv->programs, srv->nprograms, 1); srv->programs[srv->nprograms-1] =3D virObjectRef(prog); - - virObjectUnlock(srv); return 0; } =20 @@ -846,13 +826,12 @@ void virNetServerSetClientAuthenticated(virNetServer *srv, virNetServerClient *client) { - virObjectLock(srv); - virObjectLock(client); + VIR_LOCK_GUARD server_lock =3D virObjectLockGuard(srv); + VIR_LOCK_GUARD client_lock =3D virObjectLockGuard(srv); + virNetServerClientSetAuthLocked(client, VIR_NET_SERVER_SERVICE_AUTH_NO= NE); virNetServerSetClientAuthCompletedLocked(srv, client); virNetServerCheckLimits(srv); - virObjectUnlock(client); - virObjectUnlock(srv); } =20 =20 @@ -871,9 +850,9 @@ void virNetServerUpdateServices(virNetServer *srv, bool enabled) { - virObjectLock(srv); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); + virNetServerUpdateServicesLocked(srv, enabled); - virObjectUnlock(srv); } =20 =20 @@ -904,22 +883,20 @@ virNetServerDispose(void *obj) void virNetServerClose(virNetServer *srv) { - size_t i; - if (!srv) return; =20 - virObjectLock(srv); + VIR_WITH_OBJECT_LOCK_GUARD(srv) { + size_t i; =20 - for (i =3D 0; i < srv->nservices; i++) - virNetServerServiceClose(srv->services[i]); - - for (i =3D 0; i < srv->nclients; i++) - virNetServerClientClose(srv->clients[i]); + for (i =3D 0; i < srv->nservices; i++) + virNetServerServiceClose(srv->services[i]); =20 - virThreadPoolStop(srv->workers); + for (i =3D 0; i < srv->nclients; i++) + virNetServerClientClose(srv->clients[i]); =20 - virObjectUnlock(srv); + virThreadPoolStop(srv->workers); + } } =20 =20 @@ -947,13 +924,9 @@ virNetServerTrackCompletedAuthLocked(virNetServer *srv) bool virNetServerHasClients(virNetServer *srv) { - bool ret; - - virObjectLock(srv); - ret =3D !!srv->nclients; - virObjectUnlock(srv); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 - return ret; + return !!srv->nclients; } =20 =20 @@ -963,42 +936,37 @@ virNetServerProcessClients(virNetServer *srv) size_t i =3D 0; =20 while (true) { + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); virNetServerClient *client; bool removed =3D false; =20 - virObjectLock(srv); - if (i >=3D srv->nclients) { - virObjectUnlock(srv); return; } =20 client =3D srv->clients[i]; - virObjectLock(client); - if (virNetServerClientWantCloseLocked(client)) - virNetServerClientCloseLocked(client); =20 - if (virNetServerClientIsClosedLocked(client)) { - VIR_DELETE_ELEMENT(srv->clients, i, srv->nclients); - removed =3D true; + VIR_WITH_OBJECT_LOCK_GUARD(client) { + if (virNetServerClientWantCloseLocked(client)) + virNetServerClientCloseLocked(client); =20 - /* Update server authentication tracking */ - virNetServerSetClientAuthCompletedLocked(srv, client); - virNetServerCheckLimits(srv); - } + if (virNetServerClientIsClosedLocked(client)) { + VIR_DELETE_ELEMENT(srv->clients, i, srv->nclients); + removed =3D true; =20 - virObjectUnlock(client); + /* Update server authentication tracking */ + virNetServerSetClientAuthCompletedLocked(srv, client); + virNetServerCheckLimits(srv); + } + } =20 if (removed) { i =3D 0; - virObjectUnlock(srv); virObjectUnref(client); continue; } =20 i++; - - virObjectUnlock(srv); } } =20 @@ -1019,7 +987,7 @@ virNetServerGetThreadPoolParameters(virNetServer *srv, size_t *nPrioWorkers, size_t *jobQueueDepth) { - virObjectLock(srv); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 *minWorkers =3D virThreadPoolGetMinWorkers(srv->workers); *maxWorkers =3D virThreadPoolGetMaxWorkers(srv->workers); @@ -1028,7 +996,6 @@ virNetServerGetThreadPoolParameters(virNetServer *srv, *nPrioWorkers =3D virThreadPoolGetPriorityWorkers(srv->workers); *jobQueueDepth =3D virThreadPoolGetJobQueueDepth(srv->workers); =20 - virObjectUnlock(srv); return 0; } =20 @@ -1039,66 +1006,46 @@ virNetServerSetThreadPoolParameters(virNetServer *s= rv, long long int maxWorkers, long long int prioWorkers) { - int ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 - virObjectLock(srv); - ret =3D virThreadPoolSetParameters(srv->workers, minWorkers, - maxWorkers, prioWorkers); - virObjectUnlock(srv); - - return ret; + return virThreadPoolSetParameters(srv->workers, minWorkers, + maxWorkers, prioWorkers); } =20 =20 size_t virNetServerGetMaxClients(virNetServer *srv) { - size_t ret; - - virObjectLock(srv); - ret =3D srv->nclients_max; - virObjectUnlock(srv); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 - return ret; + return srv->nclients_max; } =20 =20 size_t virNetServerGetCurrentClients(virNetServer *srv) { - size_t ret; - - virObjectLock(srv); - ret =3D srv->nclients; - virObjectUnlock(srv); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 - return ret; + return srv->nclients; } =20 =20 size_t virNetServerGetMaxUnauthClients(virNetServer *srv) { - size_t ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 - virObjectLock(srv); - ret =3D srv->nclients_unauth_max; - virObjectUnlock(srv); - - return ret; + return srv->nclients_unauth_max; } =20 =20 size_t virNetServerGetCurrentUnauthClients(virNetServer *srv) { - size_t ret; - - virObjectLock(srv); - ret =3D srv->nclients_unauth; - virObjectUnlock(srv); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 - return ret; + return srv->nclients_unauth; } =20 =20 @@ -1106,17 +1053,15 @@ bool virNetServerNeedsAuth(virNetServer *srv, int auth) { - bool ret =3D false; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); size_t i; =20 - virObjectLock(srv); for (i =3D 0; i < srv->nservices; i++) { if (virNetServerServiceGetAuth(srv->services[i]) =3D=3D auth) - ret =3D true; + return true; } - virObjectUnlock(srv); =20 - return ret; + return false; } =20 =20 @@ -1127,8 +1072,7 @@ virNetServerGetClients(virNetServer *srv, size_t i; size_t nclients =3D 0; virNetServerClient **list =3D NULL; - - virObjectLock(srv); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); =20 for (i =3D 0; i < srv->nclients; i++) { virNetServerClient *client =3D virObjectRef(srv->clients[i]); @@ -1137,8 +1081,6 @@ virNetServerGetClients(virNetServer *srv, =20 *clts =3D g_steal_pointer(&list); =20 - virObjectUnlock(srv); - return nclients; } =20 @@ -1147,23 +1089,17 @@ virNetServerClient * virNetServerGetClient(virNetServer *srv, unsigned long long id) { + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); size_t i; - virNetServerClient *ret =3D NULL; - - virObjectLock(srv); =20 for (i =3D 0; i < srv->nclients; i++) { virNetServerClient *client =3D srv->clients[i]; if (virNetServerClientGetID(client) =3D=3D id) - ret =3D virObjectRef(client); + return virObjectRef(client); } =20 - virObjectUnlock(srv); - - if (!ret) - virReportError(VIR_ERR_NO_CLIENT, - _("No client with matching ID '%llu'"), id); - return ret; + virReportError(VIR_ERR_NO_CLIENT, _("No client with matching ID '%llu'= "), id); + return NULL; } =20 =20 @@ -1172,13 +1108,9 @@ virNetServerSetClientLimits(virNetServer *srv, long long int maxClients, long long int maxClientsUnauth) { - int ret =3D -1; - size_t max, max_unauth; - - virObjectLock(srv); - - max =3D maxClients >=3D 0 ? maxClients : srv->nclients_max; - max_unauth =3D maxClientsUnauth >=3D 0 ? + VIR_LOCK_GUARD lock =3D virObjectLockGuard(srv); + size_t max =3D maxClients >=3D 0 ? maxClients : srv->nclients_max; + size_t max_unauth =3D maxClientsUnauth >=3D 0 ? maxClientsUnauth : srv->nclients_unauth_max; =20 if (max < max_unauth) { @@ -1186,7 +1118,7 @@ virNetServerSetClientLimits(virNetServer *srv, _("The overall maximum number of clients must be " "greater than the maximum number of clients waiti= ng " "for authentication")); - goto cleanup; + return -1; } =20 if (maxClients >=3D 0) @@ -1197,10 +1129,7 @@ virNetServerSetClientLimits(virNetServer *srv, =20 virNetServerCheckLimits(srv); =20 - ret =3D 0; - cleanup: - virObjectUnlock(srv); - return ret; + return 0; } =20 =20 @@ -1226,30 +1155,24 @@ virNetServerGetTLSContext(virNetServer *srv) int virNetServerUpdateTlsFiles(virNetServer *srv) { - int ret =3D -1; - virNetTLSContext *ctxt =3D NULL; bool privileged =3D geteuid() =3D=3D 0; + virNetTLSContext *ctxt =3D virNetServerGetTLSContext(srv); =20 - ctxt =3D virNetServerGetTLSContext(srv); if (!ctxt) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no tls service found, unable to update tls files= ")); return -1; } =20 - virObjectLock(srv); - virObjectLock(ctxt); - - if (virNetTLSContextReloadForServer(ctxt, !privileged)) { - VIR_DEBUG("failed to reload server's tls context"); - goto cleanup; + VIR_WITH_OBJECT_LOCK_GUARD(srv) { + VIR_WITH_OBJECT_LOCK_GUARD(ctxt) { + if (virNetTLSContextReloadForServer(ctxt, !privileged)) { + VIR_DEBUG("failed to reload server's tls context"); + return -1; + } + } } =20 VIR_DEBUG("update tls files success"); - ret =3D 0; - - cleanup: - virObjectUnlock(ctxt); - virObjectUnlock(srv); - return ret; + return 0; } --=20 2.31.1 From nobody Mon May 13 06:31:28 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=1649775555; cv=none; d=zohomail.com; s=zohoarc; b=HW+dJ8dagP2zN5rgKooBpAratmPAv+d3yR/2Swus2g8Ud/fV+NcpeBXWOSTCaAQB2KqKFGFvEZHeFmtF6uG7O9vYQwXdLi3M1KGrpuhKOx2Ihz59xnhhy0wj/263mg+P0QMZi0q/b3fRVJ6NiioeqiIm7NbD0TlT/nDR7K/+0fM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1649775555; 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=uXoUo1J4lMhGe/yMIqAr9okKst2XjpVYlS2CfsM1frk=; b=UCoGWVFs/n7NVtynn3NICWKoMeUW93TE9AOSU6IOhnQZoznHbRiBPr91Zls7McVYQ5bOHlMn17DBGA2ESccju/nfcqVt7A/cM7eGeIoahVCeQ6Z9od3tbsjorv1Bp4hkOCmNC+ohgak6RyUilfLl1gkJFl8+fja0QHU/1GcHdNg= 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 1649775555876627.0006281638055; Tue, 12 Apr 2022 07:59:15 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-390-JGr2JggwPZu9SYQS604Qmw-1; Tue, 12 Apr 2022 10:58:08 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 594FF858F1C; Tue, 12 Apr 2022 14:57:37 +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 40DF0C50944; Tue, 12 Apr 2022 14:57:37 +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 EE69A194036A; Tue, 12 Apr 2022 14:57:36 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 086931940365 for ; Tue, 12 Apr 2022 14:57:36 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id DF170432032; Tue, 12 Apr 2022 14:57:35 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.194.239]) by smtp.corp.redhat.com (Postfix) with ESMTP id 34FEE4AE6E2; Tue, 12 Apr 2022 14:57:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649775554; 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=uXoUo1J4lMhGe/yMIqAr9okKst2XjpVYlS2CfsM1frk=; b=Ks0il9Er+/uSvPVwSlw1gu7U7mmbTtb9kDfiZzel4KsN3ZQSwRBu4/YkVrrMQ/TW3Iexyb NWSNyBdb/Xg4HeY2hE1NjWrmzHrrM+IfrmZ4sWwxbYOo5ise8+kR3LdQ1a2QvbmeUn/cER VuU2hfWfwtIU+Du29FDUcm2TbkioJXo= X-MC-Unique: JGr2JggwPZu9SYQS604Qmw-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 08/10] virnetserverclient: Use automatic mutex management Date: Tue, 12 Apr 2022 16:57:25 +0200 Message-Id: <20220412145727.69564-9-twiederh@redhat.com> In-Reply-To: <20220412145727.69564-1-twiederh@redhat.com> References: <20220412145727.69564-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 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: 1649775557596100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/rpc/virnetserverclient.c | 432 +++++++++++++++-------------------- 1 file changed, 186 insertions(+), 246 deletions(-) diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c index 7d5c0965b8..da9956f2b4 100644 --- a/src/rpc/virnetserverclient.c +++ b/src/rpc/virnetserverclient.c @@ -234,14 +234,12 @@ int virNetServerClientAddFilter(virNetServerClient *c= lient, virNetServerClientFilterFunc func, void *opaque) { + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); virNetServerClientFilter *filter; virNetServerClientFilter **place; - int ret; =20 filter =3D g_new0(virNetServerClientFilter, 1); =20 - virObjectLock(client); - filter->id =3D client->nextFilterID++; filter->func =3D func; filter->opaque =3D opaque; @@ -251,21 +249,16 @@ int virNetServerClientAddFilter(virNetServerClient *c= lient, place =3D &(*place)->next; *place =3D filter; =20 - ret =3D filter->id; - - virObjectUnlock(client); - - return ret; + return filter->id; } =20 void virNetServerClientRemoveFilter(virNetServerClient *client, int filterID) { + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); virNetServerClientFilter *tmp; virNetServerClientFilter *prev; =20 - virObjectLock(client); - prev =3D NULL; tmp =3D client->filters; while (tmp) { @@ -281,8 +274,6 @@ void virNetServerClientRemoveFilter(virNetServerClient = *client, prev =3D tmp; tmp =3D tmp->next; } - - virObjectUnlock(client); } =20 =20 @@ -322,19 +313,19 @@ virNetServerClientCheckAccess(virNetServerClient *cli= ent) static void virNetServerClientDispatchMessage(virNetServerClient *client, virNetMessage *msg) { - virObjectLock(client); - if (!client->dispatchFunc) { - virNetMessageFree(msg); - client->wantClose =3D true; - virObjectUnlock(client); - } else { - virObjectUnlock(client); - /* Accessing 'client' is safe, because virNetServerClientSetDispat= cher - * only permits setting 'dispatchFunc' once, so if non-NULL, it wi= ll - * never change again - */ - client->dispatchFunc(client, msg, client->dispatchOpaque); + VIR_WITH_OBJECT_LOCK_GUARD(client) { + if (!client->dispatchFunc) { + virNetMessageFree(msg); + client->wantClose =3D true; + return; + } } + + /* Accessing 'client' is safe, because virNetServerClientSetDispatcher + * only permits setting 'dispatchFunc' once, so if non-NULL, it will + * never change again + */ + client->dispatchFunc(client, msg, client->dispatchOpaque); } =20 =20 @@ -343,13 +334,14 @@ static void virNetServerClientSockTimerFunc(int timer, { virNetServerClient *client =3D opaque; virNetMessage *msg =3D NULL; - virObjectLock(client); - virEventUpdateTimeout(timer, -1); - /* Although client->rx !=3D NULL when this timer is enabled, it might = have - * changed since the client was unlocked in the meantime. */ - if (client->rx) - msg =3D virNetServerClientDispatchRead(client); - virObjectUnlock(client); + + VIR_WITH_OBJECT_LOCK_GUARD(client) { + virEventUpdateTimeout(timer, -1); + /* Although client->rx !=3D NULL when this timer is enabled, it mi= ght have + * changed since the client was unlocked in the meantime. */ + if (client->rx) + msg =3D virNetServerClientDispatchRead(client); + } =20 if (msg) virNetServerClientDispatchMessage(client, msg); @@ -587,53 +579,45 @@ virJSONValue *virNetServerClientPreExecRestart(virNet= ServerClient *client) g_autoptr(virJSONValue) object =3D virJSONValueNewObject(); g_autoptr(virJSONValue) sock =3D NULL; g_autoptr(virJSONValue) priv =3D NULL; - - virObjectLock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); =20 if (virJSONValueObjectAppendNumberUlong(object, "id", client->id) < 0) - goto error; + return NULL; if (virJSONValueObjectAppendNumberInt(object, "auth", client->auth) < = 0) - goto error; + return NULL; if (virJSONValueObjectAppendBoolean(object, "auth_pending", client->au= th_pending) < 0) - goto error; + return NULL; if (virJSONValueObjectAppendBoolean(object, "readonly", client->readon= ly) < 0) - goto error; + return NULL; if (virJSONValueObjectAppendNumberUint(object, "nrequests_max", client= ->nrequests_max) < 0) - goto error; + return NULL; =20 if (client->conn_time && virJSONValueObjectAppendNumberLong(object, "conn_time", client->conn_time) < 0) - goto error; + return NULL; =20 if (!(sock =3D virNetSocketPreExecRestart(client->sock))) - goto error; + return NULL; =20 if (virJSONValueObjectAppend(object, "sock", &sock) < 0) - goto error; + return NULL; =20 if (!(priv =3D client->privateDataPreExecRestart(client, client->priva= teData))) - goto error; + return NULL; =20 if (virJSONValueObjectAppend(object, "privateData", &priv) < 0) - goto error; + return NULL; =20 - virObjectUnlock(client); return g_steal_pointer(&object); - - error: - virObjectUnlock(client); - return NULL; } =20 =20 int virNetServerClientGetAuth(virNetServerClient *client) { - int auth; - virObjectLock(client); - auth =3D client->auth; - virObjectUnlock(client); - return auth; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + + return client->auth; } =20 =20 @@ -647,11 +631,9 @@ virNetServerClientSetAuthLocked(virNetServerClient *cl= ient, =20 bool virNetServerClientGetReadonly(virNetServerClient *client) { - bool readonly; - virObjectLock(client); - readonly =3D client->readonly; - virObjectUnlock(client); - return readonly; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + + return client->readonly; } =20 =20 @@ -659,9 +641,9 @@ void virNetServerClientSetReadonly(virNetServerClient *client, bool readonly) { - virObjectLock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + client->readonly =3D readonly; - virObjectUnlock(client); } =20 =20 @@ -677,52 +659,48 @@ long long virNetServerClientGetTimestamp(virNetServer= Client *client) =20 bool virNetServerClientHasTLSSession(virNetServerClient *client) { - bool has; - virObjectLock(client); - has =3D client->tls ? true : false; - virObjectUnlock(client); - return has; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + + return !!client->tls; } =20 =20 virNetTLSSession *virNetServerClientGetTLSSession(virNetServerClient *clie= nt) { - virNetTLSSession *tls; - virObjectLock(client); - tls =3D client->tls; - virObjectUnlock(client); - return tls; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + + return client->tls; } =20 int virNetServerClientGetTLSKeySize(virNetServerClient *client) { - int size =3D 0; - virObjectLock(client); - if (client->tls) - size =3D virNetTLSSessionGetKeySize(client->tls); - virObjectUnlock(client); - return size; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + + if (!client->tls) + return 0; + + return virNetTLSSessionGetKeySize(client->tls); } =20 int virNetServerClientGetFD(virNetServerClient *client) { - int fd =3D -1; - virObjectLock(client); - if (client->sock) - fd =3D virNetSocketGetFD(client->sock); - virObjectUnlock(client); - return fd; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + + if (!client->sock) + return -1; + + return virNetSocketGetFD(client->sock); } =20 =20 bool virNetServerClientIsLocal(virNetServerClient *client) { - bool local =3D false; - virObjectLock(client); - if (client->sock) - local =3D virNetSocketIsLocal(client->sock); - virObjectUnlock(client); - return local; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + + if (!client->sock) + return false; + + return virNetSocketIsLocal(client->sock); } =20 =20 @@ -730,14 +708,12 @@ int virNetServerClientGetUNIXIdentity(virNetServerCli= ent *client, uid_t *uid, gid_t *gid, pid_t *pid, unsigned long long *timestamp) { - int ret =3D -1; - virObjectLock(client); - if (client->sock) - ret =3D virNetSocketGetUNIXIdentity(client->sock, - uid, gid, pid, - timestamp); - virObjectUnlock(client); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + + if (!client->sock) + return -1; + + return virNetSocketGetUNIXIdentity(client->sock, uid, gid, pid, timest= amp); } =20 =20 @@ -806,56 +782,60 @@ virNetServerClientCreateIdentity(virNetServerClient *= client) =20 virIdentity *virNetServerClientGetIdentity(virNetServerClient *client) { - virIdentity *ret =3D NULL; - virObjectLock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + if (!client->identity) client->identity =3D virNetServerClientCreateIdentity(client); - if (client->identity) - ret =3D g_object_ref(client->identity); - virObjectUnlock(client); - return ret; + + if (!client->identity) + return NULL; + + return g_object_ref(client->identity); } =20 =20 void virNetServerClientSetIdentity(virNetServerClient *client, virIdentity *identity) { - virObjectLock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + g_clear_object(&client->identity); client->identity =3D identity; if (client->identity) g_object_ref(client->identity); - virObjectUnlock(client); } =20 =20 int virNetServerClientGetSELinuxContext(virNetServerClient *client, char **context) { - int ret =3D 0; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + *context =3D NULL; - virObjectLock(client); - if (client->sock) - ret =3D virNetSocketGetSELinuxContext(client->sock, context); - virObjectUnlock(client); - return ret; + + if (!client->sock) + return 0; + + return virNetSocketGetSELinuxContext(client->sock, context); } =20 =20 bool virNetServerClientIsSecure(virNetServerClient *client) { - bool secure =3D false; - virObjectLock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + if (client->tls) - secure =3D true; + return true; + #if WITH_SASL if (client->sasl) - secure =3D true; + return true; #endif + if (client->sock && virNetSocketIsLocal(client->sock)) - secure =3D true; - virObjectUnlock(client); - return secure; + return true; + + return false; } =20 =20 @@ -863,53 +843,47 @@ bool virNetServerClientIsSecure(virNetServerClient *c= lient) void virNetServerClientSetSASLSession(virNetServerClient *client, virNetSASLSession *sasl) { + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + /* We don't set the sasl session on the socket here * because we need to send out the auth confirmation * in the clear. Only once we complete the next 'tx' * operation do we switch to SASL mode */ - virObjectLock(client); client->sasl =3D virObjectRef(sasl); - virObjectUnlock(client); } =20 =20 virNetSASLSession *virNetServerClientGetSASLSession(virNetServerClient *cl= ient) { - virNetSASLSession *sasl; - virObjectLock(client); - sasl =3D client->sasl; - virObjectUnlock(client); - return sasl; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + + return client->sasl; } =20 bool virNetServerClientHasSASLSession(virNetServerClient *client) { - bool has =3D false; - virObjectLock(client); - has =3D !!client->sasl; - virObjectUnlock(client); - return has; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + + return !!client->sasl; } #endif =20 =20 void *virNetServerClientGetPrivateData(virNetServerClient *client) { - void *data; - virObjectLock(client); - data =3D client->privateData; - virObjectUnlock(client); - return data; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + + return client->privateData; } =20 =20 void virNetServerClientSetCloseHook(virNetServerClient *client, virNetServerClientCloseFunc cf) { - virObjectLock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + client->privateDataCloseFunc =3D cf; - virObjectUnlock(client); } =20 =20 @@ -917,7 +891,8 @@ void virNetServerClientSetDispatcher(virNetServerClient= *client, virNetServerClientDispatchFunc func, void *opaque) { - virObjectLock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + /* Only set dispatcher if not already set, to avoid race * with dispatch code that runs without locks held */ @@ -925,7 +900,6 @@ void virNetServerClientSetDispatcher(virNetServerClient= *client, client->dispatchFunc =3D func; client->dispatchOpaque =3D opaque; } - virObjectUnlock(client); } =20 =20 @@ -1042,9 +1016,9 @@ virNetServerClientCloseLocked(virNetServerClient *cli= ent) void virNetServerClientClose(virNetServerClient *client) { - virObjectLock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + virNetServerClientCloseLocked(client); - virObjectUnlock(client); } =20 =20 @@ -1057,16 +1031,16 @@ virNetServerClientIsClosedLocked(virNetServerClient= *client) =20 void virNetServerClientDelayedClose(virNetServerClient *client) { - virObjectLock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + client->delayedClose =3D true; - virObjectUnlock(client); } =20 void virNetServerClientImmediateClose(virNetServerClient *client) { - virObjectLock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + client->wantClose =3D true; - virObjectUnlock(client); } =20 =20 @@ -1079,49 +1053,46 @@ virNetServerClientWantCloseLocked(virNetServerClien= t *client) =20 int virNetServerClientInit(virNetServerClient *client) { - virObjectLock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + int ret =3D -1; =20 if (!client->tlsCtxt) { /* Plain socket, so prepare to read first message */ if (virNetServerClientRegisterEvent(client) < 0) goto error; - } else { - int ret; + return 0; + } =20 - if (!(client->tls =3D virNetTLSSessionNew(client->tlsCtxt, - NULL))) - goto error; + if (!(client->tls =3D virNetTLSSessionNew(client->tlsCtxt, NULL))) + goto error; =20 - virNetSocketSetTLSSession(client->sock, - client->tls); + virNetSocketSetTLSSession(client->sock, client->tls); =20 - /* Begin the TLS handshake. */ - virObjectLock(client->tlsCtxt); + /* Begin the TLS handshake. */ + VIR_WITH_OBJECT_LOCK_GUARD(client->tlsCtxt) { ret =3D virNetTLSSessionHandshake(client->tls); - virObjectUnlock(client->tlsCtxt); - if (ret =3D=3D 0) { - /* Unlikely, but ... Next step is to check the certificate. */ - if (virNetServerClientCheckAccess(client) < 0) - goto error; - - /* Handshake & cert check OK, so prepare to read first messag= e */ - if (virNetServerClientRegisterEvent(client) < 0) - goto error; - } else if (ret > 0) { - /* Most likely, need to do more handshake data */ - if (virNetServerClientRegisterEvent(client) < 0) - goto error; - } else { + } + + if (ret =3D=3D 0) { + /* Unlikely, but ... Next step is to check the certificate. */ + if (virNetServerClientCheckAccess(client) < 0) goto error; - } + + /* Handshake & cert check OK, so prepare to read first message */ + if (virNetServerClientRegisterEvent(client) < 0) + goto error; + } else if (ret > 0) { + /* Most likely, need to do more handshake data */ + if (virNetServerClientRegisterEvent(client) < 0) + goto error; + } else { + goto error; } =20 - virObjectUnlock(client); return 0; =20 error: client->wantClose =3D true; - virObjectUnlock(client); return -1; } =20 @@ -1406,11 +1377,13 @@ virNetServerClientDispatchWrite(virNetServerClient = *client) static void virNetServerClientDispatchHandshake(virNetServerClient *client) { - int ret; + int ret =3D -1; + /* Continue the handshake. */ - virObjectLock(client->tlsCtxt); - ret =3D virNetTLSSessionHandshake(client->tls); - virObjectUnlock(client->tlsCtxt); + VIR_WITH_OBJECT_LOCK_GUARD(client->tlsCtxt) { + ret =3D virNetTLSSessionHandshake(client->tls); + } + if (ret =3D=3D 0) { /* Finished. Next step is to check the certificate. */ if (virNetServerClientCheckAccess(client) < 0) @@ -1435,36 +1408,29 @@ virNetServerClientDispatchEvent(virNetSocket *sock,= int events, void *opaque) virNetServerClient *client =3D opaque; virNetMessage *msg =3D NULL; =20 - virObjectLock(client); - - if (client->sock !=3D sock) { - virNetSocketRemoveIOCallback(sock); - virObjectUnlock(client); - return; - } - - if (events & (VIR_EVENT_HANDLE_WRITABLE | - VIR_EVENT_HANDLE_READABLE)) { - if (client->tls && - virNetTLSSessionGetHandshakeStatus(client->tls) !=3D - VIR_NET_TLS_HANDSHAKE_COMPLETE) { - virNetServerClientDispatchHandshake(client); - } else { - if (events & VIR_EVENT_HANDLE_WRITABLE) - virNetServerClientDispatchWrite(client); - if (events & VIR_EVENT_HANDLE_READABLE && - client->rx) - msg =3D virNetServerClientDispatchRead(client); + VIR_WITH_OBJECT_LOCK_GUARD(client) { + if (client->sock !=3D sock) { + virNetSocketRemoveIOCallback(sock); + return; } - } =20 - /* NB, will get HANGUP + READABLE at same time upon - * disconnect */ - if (events & (VIR_EVENT_HANDLE_ERROR | - VIR_EVENT_HANDLE_HANGUP)) - client->wantClose =3D true; + if (events & (VIR_EVENT_HANDLE_WRITABLE | VIR_EVENT_HANDLE_READABL= E)) { + if (client->tls && + virNetTLSSessionGetHandshakeStatus(client->tls) !=3D + VIR_NET_TLS_HANDSHAKE_COMPLETE) { + virNetServerClientDispatchHandshake(client); + } else { + if (events & VIR_EVENT_HANDLE_WRITABLE) + virNetServerClientDispatchWrite(client); + if ((events & VIR_EVENT_HANDLE_READABLE) && client->rx) + msg =3D virNetServerClientDispatchRead(client); + } + } =20 - virObjectUnlock(client); + /* NB, will get HANGUP + READABLE at same time upon disconnect */ + if (events & (VIR_EVENT_HANDLE_ERROR | VIR_EVENT_HANDLE_HANGUP)) + client->wantClose =3D true; + } =20 if (msg) virNetServerClientDispatchMessage(client, msg); @@ -1499,24 +1465,18 @@ virNetServerClientSendMessageLocked(virNetServerCli= ent *client, int virNetServerClientSendMessage(virNetServerClient *client, virNetMessage *msg) { - int ret; - - virObjectLock(client); - ret =3D virNetServerClientSendMessageLocked(client, msg); - virObjectUnlock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); =20 - return ret; + return virNetServerClientSendMessageLocked(client, msg); } =20 =20 bool virNetServerClientIsAuthenticated(virNetServerClient *client) { - bool authenticated; - virObjectLock(client); - authenticated =3D virNetServerClientAuthMethodImpliesAuthenticated(cli= ent->auth); - virObjectUnlock(client); - return authenticated; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); + + return virNetServerClientAuthMethodImpliesAuthenticated(client->auth); } =20 =20 @@ -1556,57 +1516,44 @@ virNetServerClientInitKeepAlive(virNetServerClient = *client, int interval, unsigned int count) { + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); virKeepAlive *ka; - int ret =3D -1; - - virObjectLock(client); =20 if (!(ka =3D virKeepAliveNew(interval, count, client, virNetServerClientKeepAliveSendCB, virNetServerClientKeepAliveDeadCB, virObjectFreeCallback))) - goto cleanup; + return -1; + /* keepalive object has a reference to client */ virObjectRef(client); =20 client->keepalive =3D ka; - ret =3D 0; - cleanup: - virObjectUnlock(client); - - return ret; + return 0; } =20 int virNetServerClientStartKeepAlive(virNetServerClient *client) { - int ret =3D -1; - - virObjectLock(client); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); =20 /* The connection might have been closed before we got here and thus t= he * keepalive object could have been removed too. */ if (!client->keepalive) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("connection not open")); - goto cleanup; + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not ope= n")); + return -1; } =20 - ret =3D virKeepAliveStart(client->keepalive, 0, 0); - - cleanup: - virObjectUnlock(client); - return ret; + return virKeepAliveStart(client->keepalive, 0, 0); } =20 int virNetServerClientGetTransport(virNetServerClient *client) { + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); int ret =3D -1; =20 - virObjectLock(client); - if (client->sock && virNetSocketIsLocal(client->sock)) ret =3D VIR_CLIENT_TRANS_UNIX; else @@ -1615,8 +1562,6 @@ virNetServerClientGetTransport(virNetServerClient *cl= ient) if (client->tls) ret =3D VIR_CLIENT_TRANS_TLS; =20 - virObjectUnlock(client); - return ret; } =20 @@ -1625,16 +1570,15 @@ virNetServerClientGetInfo(virNetServerClient *clien= t, bool *readonly, char **sock_addr, virIdentity **identity) { - int ret =3D -1; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(client); const char *addr; =20 - virObjectLock(client); *readonly =3D client->readonly; =20 if (!(addr =3D virNetServerClientRemoteAddrStringURI(client))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("No network socket associated with client")); - goto cleanup; + return -1; } =20 *sock_addr =3D g_strdup(addr); @@ -1642,15 +1586,11 @@ virNetServerClientGetInfo(virNetServerClient *clien= t, if (!client->identity) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("No identity information available for client")); - goto cleanup; + return -1; } =20 *identity =3D g_object_ref(client->identity); - - ret =3D 0; - cleanup: - virObjectUnlock(client); - return ret; + return 0; } =20 =20 --=20 2.31.1 From nobody Mon May 13 06:31:28 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=1649775495; cv=none; d=zohomail.com; s=zohoarc; b=aleo1T43YqGbT+Lps9dWTQdnasg69tk6NebA4T55EwgIvcbscq+6fNgkH8L5zFcuppwW1X45LNR7D6TUbNhyws6qomEpkmrsbQu5E6I9VNt1ltuEITM8e/cy/B5byaj5sdC3Pp/P9/wENV45RjsLNVq3PMaetlekWW93cSQ+AJo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1649775495; 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=4l5m/el7kkslC5kRwgFyqyXkWXK9HnsGlOurvsXdobE=; b=UYIsJTpgQNTb7R5iRHQFCeLVlPOsRFx1NYn+KNcCvgSg+CGqEbY8pS7Mb0P2VFRyFvxH6sMSVAnSAnRCnTJTD2ySjoT0N5VN9BIy5R5/e20VdFgGIwG0wXcqoLMc8Yx2Wr+eRC2GeUEex+VkpgX0w2m23csKmVSRSjWipRxteSY= 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 1649775495572994.4219294348568; Tue, 12 Apr 2022 07:58:15 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-457-ZXTFVkirN8it0gymgHqXoA-1; Tue, 12 Apr 2022 10:58:11 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id F0C761C10489; Tue, 12 Apr 2022 14:57:37 +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 D4829C44CCD; Tue, 12 Apr 2022 14:57:37 +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 64BB91940373; Tue, 12 Apr 2022 14:57:37 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 8C86B1940365 for ; Tue, 12 Apr 2022 14:57:36 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 81D27416375; Tue, 12 Apr 2022 14:57:36 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.194.239]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0E7DB40BAE6; Tue, 12 Apr 2022 14:57:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649775494; 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=4l5m/el7kkslC5kRwgFyqyXkWXK9HnsGlOurvsXdobE=; b=NEjT4Z+LBNQ96NRkgJhSdOm5O8xUJonO9V/0Tsf2/B1XqGz94nE2eZrw4TmgTzxUN0dYme Xknuztbb41C75zkXVll3bRC3U0dld/zfBSD7MZ/LcG+DR1OS2XQ5DBSNKkRtIuBeHPkp6g Z5sTLF4fKkCmSi+eUO04eYJJ3rOcAYM= X-MC-Unique: ZXTFVkirN8it0gymgHqXoA-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 09/10] security_manager: Use automatic mutex management Date: Tue, 12 Apr 2022 16:57:26 +0200 Message-Id: <20220412145727.69564-10-twiederh@redhat.com> In-Reply-To: <20220412145727.69564-1-twiederh@redhat.com> References: <20220412145727.69564-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 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: 1649775497257100002 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/security/security_manager.c | 524 +++++++++++++------------------- 1 file changed, 215 insertions(+), 309 deletions(-) diff --git a/src/security/security_manager.c b/src/security/security_manage= r.c index f9c942de08..572e400a48 100644 --- a/src/security/security_manager.c +++ b/src/security/security_manager.c @@ -254,13 +254,12 @@ virSecurityManagerPostFork(virSecurityManager *mgr) int virSecurityManagerTransactionStart(virSecurityManager *mgr) { - int ret =3D 0; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); =20 - virObjectLock(mgr); - if (mgr->drv->transactionStart) - ret =3D mgr->drv->transactionStart(mgr); - virObjectUnlock(mgr); - return ret; + if (!mgr->drv->transactionStart) + return 0; + + return mgr->drv->transactionStart(mgr); } =20 =20 @@ -291,13 +290,12 @@ virSecurityManagerTransactionCommit(virSecurityManage= r *mgr, pid_t pid, bool lock) { - int ret =3D 0; + VIR_LOCK_GUARD lockguard =3D virObjectLockGuard(mgr); =20 - virObjectLock(mgr); - if (mgr->drv->transactionCommit) - ret =3D mgr->drv->transactionCommit(mgr, pid, lock); - virObjectUnlock(mgr); - return ret; + if (!mgr->drv->transactionCommit) + return 0; + + return mgr->drv->transactionCommit(mgr, pid, lock); } =20 =20 @@ -310,10 +308,10 @@ virSecurityManagerTransactionCommit(virSecurityManage= r *mgr, void virSecurityManagerTransactionAbort(virSecurityManager *mgr) { - virObjectLock(mgr); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + if (mgr->drv->transactionAbort) mgr->drv->transactionAbort(mgr); - virObjectUnlock(mgr); } =20 =20 @@ -341,32 +339,28 @@ virSecurityManagerGetDriver(virSecurityManager *mgr) const char * virSecurityManagerGetDOI(virSecurityManager *mgr) { - if (mgr->drv->getDOI) { - const char *ret; - virObjectLock(mgr); - ret =3D mgr->drv->getDOI(mgr); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->getDOI) { + virReportUnsupportedError(); + return NULL; } =20 - virReportUnsupportedError(); - return NULL; + return mgr->drv->getDOI(mgr); } =20 =20 const char * virSecurityManagerGetModel(virSecurityManager *mgr) { - if (mgr->drv->getModel) { - const char *ret; - virObjectLock(mgr); - ret =3D mgr->drv->getModel(mgr); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->getModel) { + virReportUnsupportedError(); + return NULL; } =20 - virReportUnsupportedError(); - return NULL; + return mgr->drv->getModel(mgr); } =20 =20 @@ -375,15 +369,12 @@ const char * virSecurityManagerGetBaseLabel(virSecurityManager *mgr, int virtType) { - if (mgr->drv->getBaseLabel) { - const char *ret; - virObjectLock(mgr); - ret =3D mgr->drv->getBaseLabel(mgr, virtType); - virObjectUnlock(mgr); - return ret; - } + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); =20 - return NULL; + if (!mgr->drv->getBaseLabel) + return NULL; + + return mgr->drv->getBaseLabel(mgr, virtType); } =20 =20 @@ -425,16 +416,14 @@ virSecurityManagerRestoreImageLabel(virSecurityManage= r *mgr, virStorageSource *src, virSecurityDomainImageLabelFlags flags) { - if (mgr->drv->domainRestoreSecurityImageLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainRestoreSecurityImageLabel(mgr, vm, src, fl= ags); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainRestoreSecurityImageLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainRestoreSecurityImageLabel(mgr, vm, src, flags); } =20 =20 @@ -464,15 +453,12 @@ virSecurityManagerMoveImageMetadata(virSecurityManage= r *mgr, virStorageSource *src, virStorageSource *dst) { - if (mgr->drv->domainMoveImageMetadata) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainMoveImageMetadata(mgr, pid, src, dst); - virObjectUnlock(mgr); - return ret; - } + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); =20 - return 0; + if (!mgr->drv->domainMoveImageMetadata) + return 0; + + return mgr->drv->domainMoveImageMetadata(mgr, pid, src, dst); } =20 =20 @@ -480,16 +466,14 @@ int virSecurityManagerSetDaemonSocketLabel(virSecurityManager *mgr, virDomainDef *vm) { - if (mgr->drv->domainSetSecurityDaemonSocketLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecurityDaemonSocketLabel(mgr, vm); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainSetSecurityDaemonSocketLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainSetSecurityDaemonSocketLabel(mgr, vm); } =20 =20 @@ -497,16 +481,14 @@ int virSecurityManagerSetSocketLabel(virSecurityManager *mgr, virDomainDef *vm) { - if (mgr->drv->domainSetSecuritySocketLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecuritySocketLabel(mgr, vm); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainSetSecuritySocketLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainSetSecuritySocketLabel(mgr, vm); } =20 =20 @@ -514,16 +496,14 @@ int virSecurityManagerClearSocketLabel(virSecurityManager *mgr, virDomainDef *vm) { - if (mgr->drv->domainClearSecuritySocketLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainClearSecuritySocketLabel(mgr, vm); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainClearSecuritySocketLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainClearSecuritySocketLabel(mgr, vm); } =20 =20 @@ -544,16 +524,14 @@ virSecurityManagerSetImageLabel(virSecurityManager *m= gr, virStorageSource *src, virSecurityDomainImageLabelFlags flags) { - if (mgr->drv->domainSetSecurityImageLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecurityImageLabel(mgr, vm, src, flags); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainSetSecurityImageLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainSetSecurityImageLabel(mgr, vm, src, flags); } =20 =20 @@ -563,16 +541,14 @@ virSecurityManagerRestoreHostdevLabel(virSecurityMana= ger *mgr, virDomainHostdevDef *dev, const char *vroot) { - if (mgr->drv->domainRestoreSecurityHostdevLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainRestoreSecurityHostdevLabel(mgr, vm, dev, = vroot); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainRestoreSecurityHostdevLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainRestoreSecurityHostdevLabel(mgr, vm, dev, vroot= ); } =20 =20 @@ -582,16 +558,14 @@ virSecurityManagerSetHostdevLabel(virSecurityManager = *mgr, virDomainHostdevDef *dev, const char *vroot) { - if (mgr->drv->domainSetSecurityHostdevLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecurityHostdevLabel(mgr, vm, dev, vroo= t); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainSetSecurityHostdevLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainSetSecurityHostdevLabel(mgr, vm, dev, vroot); } =20 =20 @@ -600,15 +574,12 @@ virSecurityManagerSetSavedStateLabel(virSecurityManag= er *mgr, virDomainDef *vm, const char *savefile) { - if (mgr->drv->domainSetSavedStateLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSavedStateLabel(mgr, vm, savefile); - virObjectUnlock(mgr); - return ret; - } + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); =20 - return 0; + if (!mgr->drv->domainSetSavedStateLabel) + return 0; + + return mgr->drv->domainSetSavedStateLabel(mgr, vm, savefile); } =20 =20 @@ -617,15 +588,12 @@ virSecurityManagerRestoreSavedStateLabel(virSecurityM= anager *mgr, virDomainDef *vm, const char *savefile) { - if (mgr->drv->domainRestoreSavedStateLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainRestoreSavedStateLabel(mgr, vm, savefile); - virObjectUnlock(mgr); - return ret; - } + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); =20 - return 0; + if (!mgr->drv->domainRestoreSavedStateLabel) + return 0; + + return mgr->drv->domainRestoreSavedStateLabel(mgr, vm, savefile); } =20 =20 @@ -713,16 +681,14 @@ virSecurityManagerReserveLabel(virSecurityManager *mg= r, virDomainDef *vm, pid_t pid) { - if (mgr->drv->domainReserveSecurityLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainReserveSecurityLabel(mgr, vm, pid); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainReserveSecurityLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainReserveSecurityLabel(mgr, vm, pid); } =20 =20 @@ -730,16 +696,14 @@ int virSecurityManagerReleaseLabel(virSecurityManager *mgr, virDomainDef *vm) { - if (mgr->drv->domainReleaseSecurityLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainReleaseSecurityLabel(mgr, vm); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainReleaseSecurityLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainReleaseSecurityLabel(mgr, vm); } =20 =20 @@ -857,18 +821,15 @@ virSecurityManagerSetAllLabel(virSecurityManager *mgr, bool chardevStdioLogd, bool migrated) { - if (mgr->drv->domainSetSecurityAllLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecurityAllLabel(mgr, vm, incomingPath, - chardevStdioLogd, - migrated); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainSetSecurityAllLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainSetSecurityAllLabel(mgr, vm, incomingPath, + chardevStdioLogd, migrated); } =20 =20 @@ -878,17 +839,15 @@ virSecurityManagerRestoreAllLabel(virSecurityManager = *mgr, bool migrated, bool chardevStdioLogd) { - if (mgr->drv->domainRestoreSecurityAllLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainRestoreSecurityAllLabel(mgr, vm, migrated, - chardevStdioLogd); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainRestoreSecurityAllLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainRestoreSecurityAllLabel(mgr, vm, migrated, + chardevStdioLogd); } =20 int @@ -897,16 +856,14 @@ virSecurityManagerGetProcessLabel(virSecurityManager = *mgr, pid_t pid, virSecurityLabelPtr sec) { - if (mgr->drv->domainGetSecurityProcessLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainGetSecurityProcessLabel(mgr, vm, pid, sec); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainGetSecurityProcessLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainGetSecurityProcessLabel(mgr, vm, pid, sec); } =20 =20 @@ -914,16 +871,14 @@ int virSecurityManagerSetProcessLabel(virSecurityManager *mgr, virDomainDef *vm) { - if (mgr->drv->domainSetSecurityProcessLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecurityProcessLabel(mgr, vm); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainSetSecurityProcessLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainSetSecurityProcessLabel(mgr, vm); } =20 =20 @@ -957,12 +912,10 @@ virSecurityManagerVerify(virSecurityManager *mgr, if (secdef =3D=3D NULL || secdef->model =3D=3D NULL) return 0; =20 - if (mgr->drv->domainSecurityVerify) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSecurityVerify(mgr, def); - virObjectUnlock(mgr); - return ret; + VIR_WITH_OBJECT_LOCK_GUARD(mgr) { + if (mgr->drv->domainSecurityVerify) { + return mgr->drv->domainSecurityVerify(mgr, def); + } } =20 virReportUnsupportedError(); @@ -975,16 +928,14 @@ virSecurityManagerSetImageFDLabel(virSecurityManager = *mgr, virDomainDef *vm, int fd) { - if (mgr->drv->domainSetSecurityImageFDLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecurityImageFDLabel(mgr, vm, fd); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainSetSecurityImageFDLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainSetSecurityImageFDLabel(mgr, vm, fd); } =20 =20 @@ -993,16 +944,14 @@ virSecurityManagerSetTapFDLabel(virSecurityManager *m= gr, virDomainDef *vm, int fd) { - if (mgr->drv->domainSetSecurityTapFDLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecurityTapFDLabel(mgr, vm, fd); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainSetSecurityTapFDLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainSetSecurityTapFDLabel(mgr, vm, fd); } =20 =20 @@ -1010,16 +959,14 @@ char * virSecurityManagerGetMountOptions(virSecurityManager *mgr, virDomainDef *vm) { - if (mgr->drv->domainGetSecurityMountOptions) { - char *ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainGetSecurityMountOptions(mgr, vm); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainGetSecurityMountOptions) { + virReportUnsupportedError(); + return NULL; } =20 - virReportUnsupportedError(); - return NULL; + return mgr->drv->domainGetSecurityMountOptions(mgr, vm); } =20 =20 @@ -1059,15 +1006,12 @@ virSecurityManagerDomainSetPathLabel(virSecurityMan= ager *mgr, const char *path, bool allowSubtree) { - if (mgr->drv->domainSetPathLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetPathLabel(mgr, vm, path, allowSubtree); - virObjectUnlock(mgr); - return ret; - } + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); =20 - return 0; + if (!mgr->drv->domainSetPathLabel) + return 0; + + return mgr->drv->domainSetPathLabel(mgr, vm, path, allowSubtree); } =20 =20 @@ -1088,15 +1032,12 @@ virSecurityManagerDomainSetPathLabelRO(virSecurityM= anager *mgr, virDomainDef *vm, const char *path) { - if (mgr->drv->domainSetPathLabelRO) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetPathLabelRO(mgr, vm, path); - virObjectUnlock(mgr); - return ret; - } + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); =20 - return 0; + if (!mgr->drv->domainSetPathLabelRO) + return 0; + + return mgr->drv->domainSetPathLabelRO(mgr, vm, path); } =20 /** @@ -1115,15 +1056,12 @@ virSecurityManagerDomainRestorePathLabel(virSecurit= yManager *mgr, virDomainDef *vm, const char *path) { - if (mgr->drv->domainRestorePathLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainRestorePathLabel(mgr, vm, path); - virObjectUnlock(mgr); - return ret; - } + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); =20 - return 0; + if (!mgr->drv->domainRestorePathLabel) + return 0; + + return mgr->drv->domainRestorePathLabel(mgr, vm, path); } =20 =20 @@ -1143,16 +1081,14 @@ virSecurityManagerSetMemoryLabel(virSecurityManager= *mgr, virDomainDef *vm, virDomainMemoryDef *mem) { - if (mgr->drv->domainSetSecurityMemoryLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecurityMemoryLabel(mgr, vm, mem); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainSetSecurityMemoryLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainSetSecurityMemoryLabel(mgr, vm, mem); } =20 =20 @@ -1171,16 +1107,14 @@ virSecurityManagerRestoreMemoryLabel(virSecurityMan= ager *mgr, virDomainDef *vm, virDomainMemoryDef *mem) { - if (mgr->drv->domainRestoreSecurityMemoryLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainRestoreSecurityMemoryLabel(mgr, vm, mem); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainRestoreSecurityMemoryLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainRestoreSecurityMemoryLabel(mgr, vm, mem); } =20 =20 @@ -1189,16 +1123,14 @@ virSecurityManagerSetInputLabel(virSecurityManager = *mgr, virDomainDef *vm, virDomainInputDef *input) { - if (mgr->drv->domainSetSecurityInputLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecurityInputLabel(mgr, vm, input); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainSetSecurityInputLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainSetSecurityInputLabel(mgr, vm, input); } =20 =20 @@ -1207,16 +1139,14 @@ virSecurityManagerRestoreInputLabel(virSecurityMana= ger *mgr, virDomainDef *vm, virDomainInputDef *input) { - if (mgr->drv->domainRestoreSecurityInputLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainRestoreSecurityInputLabel(mgr, vm, input); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainRestoreSecurityInputLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainRestoreSecurityInputLabel(mgr, vm, input); } =20 =20 @@ -1226,17 +1156,15 @@ virSecurityManagerSetChardevLabel(virSecurityManage= r *mgr, virDomainChrSourceDef *dev_source, bool chardevStdioLogd) { - if (mgr->drv->domainSetSecurityChardevLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecurityChardevLabel(mgr, def, dev_sour= ce, - chardevStdioLogd); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainSetSecurityChardevLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainSetSecurityChardevLabel(mgr, def, dev_source, + chardevStdioLogd); } =20 =20 @@ -1246,17 +1174,15 @@ virSecurityManagerRestoreChardevLabel(virSecurityMa= nager *mgr, virDomainChrSourceDef *dev_source, bool chardevStdioLogd) { - if (mgr->drv->domainRestoreSecurityChardevLabel) { - int ret; - virObjectLock(mgr); - ret =3D mgr->drv->domainRestoreSecurityChardevLabel(mgr, def, dev_= source, - chardevStdioLogd= ); - virObjectUnlock(mgr); - return ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); + + if (!mgr->drv->domainRestoreSecurityChardevLabel) { + virReportUnsupportedError(); + return -1; } =20 - virReportUnsupportedError(); - return -1; + return mgr->drv->domainRestoreSecurityChardevLabel(mgr, def, dev_sourc= e, + chardevStdioLogd); } =20 =20 @@ -1264,17 +1190,12 @@ int virSecurityManagerSetTPMLabels(virSecurityManager *mgr, virDomainDef *vm) { - int ret; - - if (mgr->drv->domainSetSecurityTPMLabels) { - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecurityTPMLabels(mgr, vm); - virObjectUnlock(mgr); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); =20 - return ret; - } + if (!mgr->drv->domainSetSecurityTPMLabels) + return 0; =20 - return 0; + return mgr->drv->domainSetSecurityTPMLabels(mgr, vm); } =20 =20 @@ -1282,17 +1203,12 @@ int virSecurityManagerRestoreTPMLabels(virSecurityManager *mgr, virDomainDef *vm) { - int ret; + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); =20 - if (mgr->drv->domainRestoreSecurityTPMLabels) { - virObjectLock(mgr); - ret =3D mgr->drv->domainRestoreSecurityTPMLabels(mgr, vm); - virObjectUnlock(mgr); - - return ret; - } + if (!mgr->drv->domainRestoreSecurityTPMLabels) + return 0; =20 - return 0; + return mgr->drv->domainRestoreSecurityTPMLabels(mgr, vm); } =20 =20 @@ -1301,17 +1217,12 @@ virSecurityManagerSetNetdevLabel(virSecurityManager= *mgr, virDomainDef *vm, virDomainNetDef *net) { - int ret; - - if (mgr->drv->domainSetSecurityNetdevLabel) { - virObjectLock(mgr); - ret =3D mgr->drv->domainSetSecurityNetdevLabel(mgr, vm, net); - virObjectUnlock(mgr); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); =20 - return ret; - } + if (!mgr->drv->domainSetSecurityNetdevLabel) + return 0; =20 - return 0; + return mgr->drv->domainSetSecurityNetdevLabel(mgr, vm, net); } =20 =20 @@ -1320,17 +1231,12 @@ virSecurityManagerRestoreNetdevLabel(virSecurityMan= ager *mgr, virDomainDef *vm, virDomainNetDef *net) { - int ret; - - if (mgr->drv->domainRestoreSecurityNetdevLabel) { - virObjectLock(mgr); - ret =3D mgr->drv->domainRestoreSecurityNetdevLabel(mgr, vm, net); - virObjectUnlock(mgr); + VIR_LOCK_GUARD lock =3D virObjectLockGuard(mgr); =20 - return ret; - } + if (!mgr->drv->domainRestoreSecurityNetdevLabel) + return 0; =20 - return 0; + return mgr->drv->domainRestoreSecurityNetdevLabel(mgr, vm, net); } =20 =20 --=20 2.31.1 From nobody Mon May 13 06:31:28 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=1649775495; cv=none; d=zohomail.com; s=zohoarc; b=JcE9Pbqf8I3vj2jxOSwqydjOkTOHbepoAP3wn4qzoqIEUAV3y9GiDMeM8y6aM+lFjYb//bZpVs0Hd31ws05gtlgHyDZd6nbTZ9XT0/1PYk1bESp9MBc604aCojfYgbpYTKxHyjrOs75DEmqIP7pKb8wkJtwc+ceLAfSftoyOjKo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1649775495; 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=h8ocscd3lChP1udQsk2Ti8LgrkjCTAvX5Zo4DdiH0+M=; b=Nw+sg/BtT6SvnWM1G6CI1wOPr2nuefP7uBC2r7o1WXO8oyzHnINcuZ9FDseQv318k9D8sRk7gdh69ogKgbu+LGHR3B97nM1gwiEVJVSlYWwmIw2XfvJNRcE2N+a7ra3SpHeMZ+M5sPXKT/xR9Ubx93r9CJ0Dit/Dcz1YALoD9wc= 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 1649775495799884.697490789063; Tue, 12 Apr 2022 07:58:15 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-658-1lz0u_VaMBiUzBH1YYYtyg-1; Tue, 12 Apr 2022 10:58:11 -0400 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 036211C1298E; Tue, 12 Apr 2022 14:57:39 +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 DFDB4482CFC; Tue, 12 Apr 2022 14:57:38 +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 B4F5C193F6E0; Tue, 12 Apr 2022 14:57:38 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 42924193F50A for ; Tue, 12 Apr 2022 14:57:37 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 3461A432039; Tue, 12 Apr 2022 14:57:37 +0000 (UTC) Received: from work.redhat.com (unknown [10.39.194.239]) by smtp.corp.redhat.com (Postfix) with ESMTP id B91A9406793; Tue, 12 Apr 2022 14:57:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649775494; 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=h8ocscd3lChP1udQsk2Ti8LgrkjCTAvX5Zo4DdiH0+M=; b=UZZ80hr1576ufg95ccckyVOqMW+H7pBNs77hC5iEPZbgrUm2SP09A4rItu2VmMQIqyt7TZ D5KV+omhwtgpMTqiip08DwuhDWxW0AUECd26Ln54wV6wc1O715Yyk4vLMJQSv1NblLAYE2 C0dc0L2pjMs1vgttimbdYDCbpP3dk7E= X-MC-Unique: 1lz0u_VaMBiUzBH1YYYtyg-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Tim Wiederhake To: libvir-list@redhat.com Subject: [libvirt PATCH 10/10] vz_driver: Use automatic mutex management Date: Tue, 12 Apr 2022 16:57:27 +0200 Message-Id: <20220412145727.69564-11-twiederh@redhat.com> In-Reply-To: <20220412145727.69564-1-twiederh@redhat.com> References: <20220412145727.69564-1-twiederh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 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: 1649775497251100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: Tim Wiederhake Reviewed-by: Michal Privoznik --- src/vz/vz_driver.c | 50 +++++++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index 2107785ab2..82323cb1b2 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -2018,53 +2018,43 @@ vzConnectRegisterCloseCallback(virConnectPtr conn, virFreeCallback freecb) { struct _vzConn *privconn =3D conn->privateData; - int ret =3D -1; =20 if (virConnectRegisterCloseCallbackEnsureACL(conn) < 0) return -1; =20 - virObjectLock(privconn->driver); + VIR_WITH_OBJECT_LOCK_GUARD(privconn->driver) { + if (virConnectCloseCallbackDataGetCallback(privconn->closeCallback= ) !=3D NULL) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("A close callback is already registered")); + return -1; + } =20 - if (virConnectCloseCallbackDataGetCallback(privconn->closeCallback) != =3D NULL) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("A close callback is already registered")); - goto cleanup; + virConnectCloseCallbackDataRegister(privconn->closeCallback, conn,= cb, + opaque, freecb); } =20 - virConnectCloseCallbackDataRegister(privconn->closeCallback, conn, cb, - opaque, freecb); - ret =3D 0; - - cleanup: - virObjectUnlock(privconn->driver); - - return ret; + return 0; } =20 static int vzConnectUnregisterCloseCallback(virConnectPtr conn, virConnectCloseFunc c= b) { struct _vzConn *privconn =3D conn->privateData; - int ret =3D -1; =20 if (virConnectUnregisterCloseCallbackEnsureACL(conn) < 0) return -1; =20 - virObjectLock(privconn->driver); + VIR_WITH_OBJECT_LOCK_GUARD(privconn->driver) { + if (virConnectCloseCallbackDataGetCallback(privconn->closeCallback= ) !=3D cb) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("A different callback was requested")); + return -1; + } =20 - if (virConnectCloseCallbackDataGetCallback(privconn->closeCallback) != =3D cb) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("A different callback was requested")); - goto cleanup; + virConnectCloseCallbackDataUnregister(privconn->closeCallback, cb); } =20 - virConnectCloseCallbackDataUnregister(privconn->closeCallback, cb); - ret =3D 0; - - cleanup: - virObjectUnlock(privconn->driver); - - return ret; + return 0; } =20 static int vzDomainSetMemoryFlags(virDomainPtr domain, unsigned long memor= y, @@ -3795,9 +3785,9 @@ vzConnectGetAllDomainStats(virConnectPtr conn, virDomainStatsRecordPtr tmp; virDomainObj *dom =3D doms[i]; =20 - virObjectLock(dom); - tmp =3D vzDomainGetAllStats(conn, dom); - virObjectUnlock(dom); + VIR_WITH_OBJECT_LOCK_GUARD(dom) { + tmp =3D vzDomainGetAllStats(conn, dom); + } =20 if (!tmp) goto cleanup; --=20 2.31.1