From nobody Wed May 14 15:08:21 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520359141233239.4711799593208; Tue, 6 Mar 2018 09:59:01 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E60EF2D6A08; Tue, 6 Mar 2018 17:58:59 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BFFB8600D3; Tue, 6 Mar 2018 17:58:59 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 849F518033ED; Tue, 6 Mar 2018 17:58:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w26Hwwkd002056 for ; Tue, 6 Mar 2018 12:58:58 -0500 Received: by smtp.corp.redhat.com (Postfix) id 956761C71C; Tue, 6 Mar 2018 17:58:58 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.54]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0AA771C71B; Tue, 6 Mar 2018 17:58:57 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Tue, 6 Mar 2018 17:58:49 +0000 Message-Id: <20180306175852.18773-3-berrange@redhat.com> In-Reply-To: <20180306175852.18773-1-berrange@redhat.com> References: <20180306175852.18773-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/5] rpc: simplify calling convention of virNetServerClientDispatchFunc X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Tue, 06 Mar 2018 17:59:00 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Currently virNetServerClientDispatchFunc implementations are only responsible for free'ing the "msg" parameter upon success. Simplify the calling convention by making it their unconditional responsibility to free the "msg", and close the client if desired. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Jim Fehlig Reviewed-by: John Ferlan --- src/rpc/virnetserver.c | 24 +++++++++++++----------- src/rpc/virnetserverclient.c | 6 +++--- src/rpc/virnetserverclient.h | 9 ++++++--- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c index 28afe54e49..7a1376bf49 100644 --- a/src/rpc/virnetserver.c +++ b/src/rpc/virnetserver.c @@ -182,15 +182,14 @@ static void virNetServerHandleJob(void *jobOpaque, vo= id *opaque) VIR_FREE(job); } =20 -static int virNetServerDispatchNewMessage(virNetServerClientPtr client, - virNetMessagePtr msg, - void *opaque) +static void virNetServerDispatchNewMessage(virNetServerClientPtr client, + virNetMessagePtr msg, + void *opaque) { virNetServerPtr srv =3D opaque; virNetServerProgramPtr prog =3D NULL; unsigned int priority =3D 0; size_t i; - int ret =3D -1; =20 VIR_DEBUG("server=3D%p client=3D%p message=3D%p", srv, client, msg); @@ -207,7 +206,7 @@ static int virNetServerDispatchNewMessage(virNetServerC= lientPtr client, virNetServerJobPtr job; =20 if (VIR_ALLOC(job) < 0) - goto cleanup; + goto error; =20 job->client =3D client; job->msg =3D msg; @@ -218,21 +217,24 @@ static int virNetServerDispatchNewMessage(virNetServe= rClientPtr client, } =20 virObjectRef(client); - ret =3D virThreadPoolSendJob(srv->workers, priority, job); - - if (ret < 0) { + if (virThreadPoolSendJob(srv->workers, priority, job) < 0) { virObjectUnref(client); VIR_FREE(job); virObjectUnref(prog); + goto error; } } else { - ret =3D virNetServerProcessMsg(srv, client, prog, msg); + if (virNetServerProcessMsg(srv, client, prog, msg) < 0) + goto error; } =20 - cleanup: virObjectUnlock(srv); + return; =20 - return ret; + error: + virNetMessageFree(msg); + virNetServerClientClose(client); + virObjectUnlock(srv); } =20 /** diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c index 00459d17ba..ea0d5abdee 100644 --- a/src/rpc/virnetserverclient.c +++ b/src/rpc/virnetserverclient.c @@ -1315,11 +1315,11 @@ static void virNetServerClientDispatchRead(virNetSe= rverClientPtr client) =20 /* Send off to for normal dispatch to workers */ if (msg) { - if (!client->dispatchFunc || - client->dispatchFunc(client, msg, client->dispatchOpaque) = < 0) { + if (!client->dispatchFunc) { virNetMessageFree(msg); client->wantClose =3D true; - return; + } else { + client->dispatchFunc(client, msg, client->dispatchOpaque); } } =20 diff --git a/src/rpc/virnetserverclient.h b/src/rpc/virnetserverclient.h index 1a939ad4e1..b21446eeb7 100644 --- a/src/rpc/virnetserverclient.h +++ b/src/rpc/virnetserverclient.h @@ -36,9 +36,12 @@ typedef virNetServer *virNetServerPtr; typedef struct _virNetServerClient virNetServerClient; typedef virNetServerClient *virNetServerClientPtr; =20 -typedef int (*virNetServerClientDispatchFunc)(virNetServerClientPtr client, - virNetMessagePtr msg, - void *opaque); +/* This function owns the "msg" pointer it is passed and + * must arrange for virNetMessageFree to be called on it + */ +typedef void (*virNetServerClientDispatchFunc)(virNetServerClientPtr clien= t, + virNetMessagePtr msg, + void *opaque); =20 typedef int (*virNetServerClientFilterFunc)(virNetServerClientPtr client, virNetMessagePtr msg, --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list