From nobody Fri Dec 19 20:15:30 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) client-ip=205.139.110.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1587477042; cv=none; d=zohomail.com; s=zohoarc; b=R+ctdBat6mCH3n/UAmvWWdGE1XthabZq/FcGVMeNrwvZnN5b5VbommxciDXXUo40NWrBYM9Scg0gb326iK+D5/g5OLyi6tigUi8ncQDrvCy93LvQbHgdGApc7BmJ04lb5pKLNy5YFfSCxNP/F/PVSY30fz5hFkgV3O4gwFUF50Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587477042; 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=ceSC2RnMvjBKHfqqiemo+OJNhyHd50rMQs2C8S15iDE=; b=brQiNsyhh3GYUTcE0RisFv3+wEkTefZiIZIwHZQOv47ci3ZrRz6b+Jwy4QODtCXAkNXUwA7xLGwsgUGxtpV1fLU9Ceh7c/3pEs74FaZbLB7bngGOvAaFm/vsI1/0WlwwlpY9tX5o6shQP9HJzCCQgv4ctacG5FjEJG+tTMSiWGU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by mx.zohomail.com with SMTPS id 1587477042905490.9330749824701; Tue, 21 Apr 2020 06:50:42 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-264-DWXn1YEYNPW8HS8wk2nBVw-1; Tue, 21 Apr 2020 09:50:38 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6BBB71B2C98C; Tue, 21 Apr 2020 13:50:33 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 19C2EA18B0; Tue, 21 Apr 2020 13:50:32 +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 C8E1D941B2; Tue, 21 Apr 2020 13:50:31 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 03LDoEH9003314 for ; Tue, 21 Apr 2020 09:50:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id DAAFC11921A3; Tue, 21 Apr 2020 13:50:14 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast06.extmail.prod.ext.rdu2.redhat.com [10.11.55.22]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D67A011921A2 for ; Tue, 21 Apr 2020 13:50:14 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id B9006185A79B for ; Tue, 21 Apr 2020 13:50:14 +0000 (UTC) Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-392-phmOZHiSMwOPYt9qjlXllQ-1; Tue, 21 Apr 2020 09:50:12 -0400 Received: by mail-wr1-f52.google.com with SMTP id b11so16530484wrs.6 for ; Tue, 21 Apr 2020 06:50:12 -0700 (PDT) Received: from localhost.localdomain (public-gprs377075.centertel.pl. [37.47.104.52]) by smtp.gmail.com with ESMTPSA id q10sm3981826wrv.95.2020.04.21.06.50.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Apr 2020 06:50:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1587477041; 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=ceSC2RnMvjBKHfqqiemo+OJNhyHd50rMQs2C8S15iDE=; b=Jvxx67MsqCsnYIg1sCuyROwjtxoRQkqwg5clx15cEOqDwlKN4HruWo3w2qTAcwQS/idsKl rG975WzfugXlm4Ei9KinfOo/ixihvvPgGsu2cGKPeogE9hCdtmHcitnDCuBa0LATjY93i7 C9SE/8wu12I1r6CpZuUm4B7l1uGolAE= X-MC-Unique: DWXn1YEYNPW8HS8wk2nBVw-1 X-MC-Unique: phmOZHiSMwOPYt9qjlXllQ-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VsYxVhtCXSxX/UXDhsbZ9E9k6p8oNxh1qRGvQv3Hzok=; b=ZPEgxdz2DfsNZYf9d6ICVZcFo432ry0TgbpHRMLwoHKG/Fbyjbl9Z4vgsPWe0Quc0W WWqmBBHexWuBKq69sroMQnuBcFPeAbdjaLT05CisHXKJiBbVaLGeVH6iSHa8xeWn0J3S TDZfqsCUeuJv7xRNz7RJErpE9oGb+HXxTcN3pB/nweNc8NpryLeLFEq7GVGm22riLT9Y NTgPVHj5K7L5uo2l4RRDzIfhGvv8qbFOeQOqOfN+fcjmMG7ThPetfoIkYx8OB+Asfdqp PV9DDCPFAmpmNwr1Y7bm0gwKyE0fmINB/0jQ7eAbP5qrTgk9qA6j/KjEXZm3d+/mvfXe UNJg== X-Gm-Message-State: AGi0PuY7kAJZAa9pDujvyfsnkk9UD3BW1Y22AorpWozPtjN0GB8PtPqW ZXTfKtr2iOja68wjxb5s3fhQZWfTicg= X-Google-Smtp-Source: APiQypKwn62fXiARWOT98EWZfGO5uwF/VuLGcp/DA/8Jwaa9k4dkNH5KMJmYiVNV5OdsXi6KPHSzPg== X-Received: by 2002:a5d:5745:: with SMTP id q5mr26042586wrw.351.1587477010997; Tue, 21 Apr 2020 06:50:10 -0700 (PDT) From: Rafael Fonseca To: libvir-list@redhat.com Subject: [PATCH v2 10/40] rpc: convert virNetServerService to GObject Date: Tue, 21 Apr 2020 15:48:51 +0200 Message-Id: <20200421134921.3717019-11-r4f4rfs@gmail.com> In-Reply-To: <20200421134921.3717019-1-r4f4rfs@gmail.com> References: <20200421134921.3717019-1-r4f4rfs@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 03LDoEH9003314 X-loop: libvir-list@redhat.com Cc: Rafael Fonseca 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: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Signed-off-by: Rafael Fonseca --- src/lxc/lxc_controller.c | 5 +- src/rpc/virnetserver.c | 7 +-- src/rpc/virnetserverprogram.h | 7 ++- src/rpc/virnetserverservice.c | 103 +++++++++++++++++----------------- tests/virnetdaemontest.c | 4 +- 5 files changed, 61 insertions(+), 65 deletions(-) diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c index 0aa56f6d24..a8a8b413f7 100644 --- a/src/lxc/lxc_controller.c +++ b/src/lxc/lxc_controller.c @@ -989,8 +989,7 @@ static int virLXCControllerSetupServer(virLXCController= Ptr ctrl) =20 if (virNetServerAddService(srv, svc) < 0) goto error; - virObjectUnref(svc); - svc =3D NULL; + g_clear_object(&svc); =20 ctrl->prog =3D virNetServerProgramNew(VIR_LXC_MONITOR_PROGRAM, VIR_LXC_MONITOR_PROGRAM_VERSION, @@ -1011,7 +1010,7 @@ static int virLXCControllerSetupServer(virLXCControll= erPtr ctrl) virObjectUnref(srv); virObjectUnref(ctrl->daemon); ctrl->daemon =3D NULL; - virObjectUnref(svc); + g_clear_object(&svc); return -1; } =20 diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c index 284d68a88a..bb645bd103 100644 --- a/src/rpc/virnetserver.c +++ b/src/rpc/virnetserver.c @@ -658,7 +658,7 @@ int virNetServerAddService(virNetServerPtr srv, if (VIR_EXPAND_N(srv->services, srv->nservices, 1) < 0) goto error; =20 - srv->services[srv->nservices-1] =3D virObjectRef(svc); + srv->services[srv->nservices-1] =3D g_object_ref(svc); =20 virNetServerServiceSetDispatcher(svc, virNetServerDispatchNewClient, @@ -913,10 +913,7 @@ void virNetServerDispose(void *obj) =20 virThreadPoolFree(srv->workers); =20 - for (i =3D 0; i < srv->nservices; i++) - virObjectUnref(srv->services[i]); - VIR_FREE(srv->services); - + virGObjectListFreeCount(srv->services, srv->nservices); virGObjectListFreeCount(srv->programs, srv->nprograms); =20 for (i =3D 0; i < srv->nclients; i++) diff --git a/src/rpc/virnetserverprogram.h b/src/rpc/virnetserverprogram.h index bcc10809d4..72dff3b9cb 100644 --- a/src/rpc/virnetserverprogram.h +++ b/src/rpc/virnetserverprogram.h @@ -29,7 +29,12 @@ typedef struct _virNetDaemon virNetDaemon; typedef virNetDaemon *virNetDaemonPtr; =20 -typedef struct _virNetServerService virNetServerService; +#define VIR_TYPE_NET_SERVER_SERVICE vir_net_server_service_get_type() +G_DECLARE_FINAL_TYPE(virNetServerService, + vir_net_server_service, + VIR, + NET_SERVER_SERVICE, + GObject); typedef virNetServerService *virNetServerServicePtr; =20 #define VIR_TYPE_NET_SERVER_PROGRAM vir_net_server_program_get_type() diff --git a/src/rpc/virnetserverservice.c b/src/rpc/virnetserverservice.c index 9d5df456a8..946db729c5 100644 --- a/src/rpc/virnetserverservice.c +++ b/src/rpc/virnetserverservice.c @@ -35,7 +35,7 @@ VIR_LOG_INIT("rpc.netserverservice"); =20 struct _virNetServerService { - virObject parent; + GObject parent; =20 size_t nsocks; virNetSocketPtr *socks; @@ -51,19 +51,21 @@ struct _virNetServerService { }; =20 =20 -static virClassPtr virNetServerServiceClass; -static void virNetServerServiceDispose(void *obj); +G_DEFINE_TYPE(virNetServerService, vir_net_server_service, G_TYPE_OBJECT); +static void virNetServerServiceDispose(GObject *obj); +static void virNetServerServiceFinalize(GObject *obj); =20 -static int virNetServerServiceOnceInit(void) +static void vir_net_server_service_init(virNetServerService *svc G_GNUC_UN= USED) { - if (!VIR_CLASS_NEW(virNetServerService, virClassForObject())) - return -1; - - return 0; } =20 -VIR_ONCE_GLOBAL_INIT(virNetServerService); +static void vir_net_server_service_class_init(virNetServerServiceClass *kl= ass) +{ + GObjectClass *obj =3D G_OBJECT_CLASS(klass); =20 + obj->dispose =3D virNetServerServiceDispose; + obj->finalize =3D virNetServerServiceFinalize; +} =20 static void virNetServerServiceAccept(virNetSocketPtr sock, int events G_GNUC_UNUSED, @@ -97,17 +99,13 @@ virNetServerServiceNewSocket(virNetSocketPtr *socks, size_t max_queued_clients, size_t nrequests_client_max) { - virNetServerServicePtr svc; + g_autoptr(virNetServerService) svc =3D NULL; size_t i; =20 - if (virNetServerServiceInitialize() < 0) - return NULL; - - if (!(svc =3D virObjectNew(virNetServerServiceClass))) - return NULL; + svc =3D VIR_NET_SERVER_SERVICE(g_object_new(VIR_TYPE_NET_SERVER_SERVIC= E, NULL)); =20 if (VIR_ALLOC_N(svc->socks, nsocks) < 0) - goto error; + return NULL; svc->nsocks =3D nsocks; for (i =3D 0; i < svc->nsocks; i++) { svc->socks[i] =3D socks[i]; @@ -120,27 +118,22 @@ virNetServerServiceNewSocket(virNetSocketPtr *socks, =20 for (i =3D 0; i < svc->nsocks; i++) { if (virNetSocketListen(svc->socks[i], max_queued_clients) < 0) - goto error; + return NULL; =20 /* IO callback is initially disabled, until we're ready * to deal with incoming clients */ - virObjectRef(svc); + g_object_ref(svc); if (virNetSocketAddIOCallback(svc->socks[i], 0, virNetServerServiceAccept, svc, - virObjectFreeCallback) < 0) { - virObjectUnref(svc); - goto error; + g_object_unref) < 0) { + g_object_unref(svc); + return NULL; } } =20 - - return svc; - - error: - virObjectUnref(svc); - return NULL; + return g_steal_pointer(&svc); } =20 =20 @@ -258,51 +251,47 @@ virNetServerServicePtr virNetServerServiceNewFDs(int = *fds, =20 virNetServerServicePtr virNetServerServiceNewPostExecRestart(virJSONValueP= tr object) { - virNetServerServicePtr svc; + g_autoptr(virNetServerService) svc =3D NULL; virJSONValuePtr socks; size_t i; size_t n; unsigned int max; =20 - if (virNetServerServiceInitialize() < 0) - return NULL; - - if (!(svc =3D virObjectNew(virNetServerServiceClass))) - return NULL; + svc =3D VIR_NET_SERVER_SERVICE(g_object_new(VIR_TYPE_NET_SERVER_SERVIC= E, NULL)); =20 if (virJSONValueObjectGetNumberInt(object, "auth", &svc->auth) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Missing auth field in JSON state document")); - goto error; + return NULL; } if (virJSONValueObjectGetBoolean(object, "readonly", &svc->readonly) <= 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Missing readonly field in JSON state document")); - goto error; + return NULL; } if (virJSONValueObjectGetNumberUint(object, "nrequests_client_max", &max) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Missing nrequests_client_max field in JSON state= document")); - goto error; + return NULL; } svc->nrequests_client_max =3D max; =20 if (!(socks =3D virJSONValueObjectGet(object, "socks"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Missing socks field in JSON state document")); - goto error; + return NULL; } =20 if (!virJSONValueIsArray(socks)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Malformed socks array")); - goto error; + return NULL; } =20 n =3D virJSONValueArraySize(socks); if (VIR_ALLOC_N(svc->socks, n) < 0) - goto error; + return NULL; svc->nsocks =3D n; =20 for (i =3D 0; i < svc->nsocks; i++) { @@ -311,29 +300,25 @@ virNetServerServicePtr virNetServerServiceNewPostExec= Restart(virJSONValuePtr obj =20 if (!(sock =3D virNetSocketNewPostExecRestart(child))) { virObjectUnref(sock); - goto error; + return NULL; } =20 svc->socks[i] =3D sock; =20 /* IO callback is initially disabled, until we're ready * to deal with incoming clients */ - virObjectRef(svc); + g_object_ref(svc); if (virNetSocketAddIOCallback(sock, 0, virNetServerServiceAccept, svc, - virObjectFreeCallback) < 0) { - virObjectUnref(svc); - goto error; + g_object_unref) < 0) { + g_object_unref(svc); + return NULL; } } =20 - return svc; - - error: - virObjectUnref(svc); - return NULL; + return g_steal_pointer(&svc); } =20 =20 @@ -415,16 +400,28 @@ void virNetServerServiceSetDispatcher(virNetServerSer= vicePtr svc, } =20 =20 -void virNetServerServiceDispose(void *obj) +void virNetServerServiceDispose(GObject *obj) { - virNetServerServicePtr svc =3D obj; + virNetServerServicePtr svc =3D VIR_NET_SERVER_SERVICE(obj); size_t i; =20 - for (i =3D 0; i < svc->nsocks; i++) + for (i =3D 0; i < svc->nsocks; i++) { virObjectUnref(svc->socks[i]); - VIR_FREE(svc->socks); + svc->socks[i] =3D NULL; + } =20 virObjectUnref(svc->tls); + + G_OBJECT_CLASS(vir_net_server_service_parent_class)->dispose(obj); +} + +void virNetServerServiceFinalize(GObject *obj) +{ + virNetServerServicePtr svc =3D VIR_NET_SERVER_SERVICE(obj); + + VIR_FREE(svc->socks); + + G_OBJECT_CLASS(vir_net_server_service_parent_class)->finalize(obj); } =20 void virNetServerServiceToggle(virNetServerServicePtr svc, diff --git a/tests/virnetdaemontest.c b/tests/virnetdaemontest.c index 09d268627c..3107fb6747 100644 --- a/tests/virnetdaemontest.c +++ b/tests/virnetdaemontest.c @@ -85,7 +85,7 @@ static virNetServerPtr testCreateServer(const char *server_name, const char *host, int family) { virNetServerPtr srv =3D NULL; - virNetServerServicePtr svc1 =3D NULL, svc2 =3D NULL; + g_autoptr(virNetServerService) svc1 =3D NULL, svc2 =3D NULL; virNetServerClientPtr cln1 =3D NULL, cln2 =3D NULL; virNetSocketPtr sk1 =3D NULL, sk2 =3D NULL; int fdclient[2]; @@ -170,8 +170,6 @@ testCreateServer(const char *server_name, const char *h= ost, int family) virDispatchError(NULL); virObjectUnref(cln1); virObjectUnref(cln2); - virObjectUnref(svc1); - virObjectUnref(svc2); virObjectUnref(sk1); virObjectUnref(sk2); return srv; --=20 2.25.3