[PATCH 09/36] rpc: convert virNetServerService to GObject

Rafael Fonseca r4f4rfs at gmail.com
Fri Apr 3 15:15:37 UTC 2020


Signed-off-by: Rafael Fonseca <r4f4rfs at gmail.com>
---
 src/lxc/lxc_controller.c      |  6 +--
 src/rpc/virnetserver.c        |  4 +-
 src/rpc/virnetserverprogram.h |  7 ++-
 src/rpc/virnetserverservice.c | 87 +++++++++++++++--------------------
 tests/virnetdaemontest.c      |  4 +-
 5 files changed, 48 insertions(+), 60 deletions(-)

diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index 4c038c6228..ea03f5a452 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -992,8 +992,7 @@ static int virLXCControllerSetupServer(virLXCControllerPtr ctrl)
 
     if (virNetServerAddService(srv, svc) < 0)
         goto error;
-    virObjectUnref(svc);
-    svc = NULL;
+    g_clear_object(&svc);
 
     ctrl->prog = virNetServerProgramNew(VIR_LXC_MONITOR_PROGRAM,
                                         VIR_LXC_MONITOR_PROGRAM_VERSION,
@@ -1015,7 +1014,8 @@ static int virLXCControllerSetupServer(virLXCControllerPtr ctrl)
     virObjectUnref(srv);
     virObjectUnref(ctrl->daemon);
     ctrl->daemon = NULL;
-    virObjectUnref(svc);
+    if (svc)
+        g_object_unref(svc);
     return -1;
 }
 
diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c
index 5e9124c7ee..f5a59b11af 100644
--- a/src/rpc/virnetserver.c
+++ b/src/rpc/virnetserver.c
@@ -660,7 +660,7 @@ int virNetServerAddService(virNetServerPtr srv,
     if (VIR_EXPAND_N(srv->services, srv->nservices, 1) < 0)
         goto error;
 
-    srv->services[srv->nservices-1] = virObjectRef(svc);
+    srv->services[srv->nservices-1] = g_object_ref(svc);
 
     virNetServerServiceSetDispatcher(svc,
                                      virNetServerDispatchNewClient,
@@ -916,7 +916,7 @@ void virNetServerDispose(void *obj)
     virThreadPoolFree(srv->workers);
 
     for (i = 0; i < srv->nservices; i++)
-        virObjectUnref(srv->services[i]);
+        g_object_unref(srv->services[i]);
     VIR_FREE(srv->services);
 
     for (i = 0; i < srv->nprograms; 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;
 
-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;
 
 #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..781e414461 100644
--- a/src/rpc/virnetserverservice.c
+++ b/src/rpc/virnetserverservice.c
@@ -35,7 +35,7 @@
 VIR_LOG_INIT("rpc.netserverservice");
 
 struct _virNetServerService {
-    virObject parent;
+    GObject parent;
 
     size_t nsocks;
     virNetSocketPtr *socks;
@@ -51,19 +51,19 @@ struct _virNetServerService {
 };
 
 
-static virClassPtr virNetServerServiceClass;
-static void virNetServerServiceDispose(void *obj);
+G_DEFINE_TYPE(virNetServerService, vir_net_server_service, G_TYPE_OBJECT);
+static void virNetServerServiceFinalize(GObject *obj);
 
-static int virNetServerServiceOnceInit(void)
+static void vir_net_server_service_init(virNetServerService *svc G_GNUC_UNUSED)
 {
-    if (!VIR_CLASS_NEW(virNetServerService, virClassForObject()))
-        return -1;
-
-    return 0;
 }
 
-VIR_ONCE_GLOBAL_INIT(virNetServerService);
+static void vir_net_server_service_class_init(virNetServerServiceClass *klass)
+{
+    GObjectClass *obj = G_OBJECT_CLASS(klass);
 
+    obj->finalize = virNetServerServiceFinalize;
+}
 
 static void virNetServerServiceAccept(virNetSocketPtr sock,
                                       int events G_GNUC_UNUSED,
@@ -97,17 +97,13 @@ virNetServerServiceNewSocket(virNetSocketPtr *socks,
                              size_t max_queued_clients,
                              size_t nrequests_client_max)
 {
-    virNetServerServicePtr svc;
+    g_autoptr(virNetServerService) svc = NULL;
     size_t i;
 
-    if (virNetServerServiceInitialize() < 0)
-        return NULL;
-
-    if (!(svc = virObjectNew(virNetServerServiceClass)))
-        return NULL;
+    svc = VIR_NET_SERVER_SERVICE(g_object_new(VIR_TYPE_NET_SERVER_SERVICE, NULL));
 
     if (VIR_ALLOC_N(svc->socks, nsocks) < 0)
-        goto error;
+        return NULL;
     svc->nsocks = nsocks;
     for (i = 0; i < svc->nsocks; i++) {
         svc->socks[i] = socks[i];
@@ -120,27 +116,22 @@ virNetServerServiceNewSocket(virNetSocketPtr *socks,
 
     for (i = 0; i < svc->nsocks; i++) {
         if (virNetSocketListen(svc->socks[i], max_queued_clients) < 0)
-            goto error;
+            return NULL;
 
         /* 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;
         }
     }
 
-
-    return svc;
-
- error:
-    virObjectUnref(svc);
-    return NULL;
+    return g_steal_pointer(&svc);
 }
 
 
@@ -258,51 +249,47 @@ virNetServerServicePtr virNetServerServiceNewFDs(int *fds,
 
 virNetServerServicePtr virNetServerServiceNewPostExecRestart(virJSONValuePtr object)
 {
-    virNetServerServicePtr svc;
+    g_autoptr(virNetServerService) svc = NULL;
     virJSONValuePtr socks;
     size_t i;
     size_t n;
     unsigned int max;
 
-    if (virNetServerServiceInitialize() < 0)
-        return NULL;
-
-    if (!(svc = virObjectNew(virNetServerServiceClass)))
-        return NULL;
+    svc = VIR_NET_SERVER_SERVICE(g_object_new(VIR_TYPE_NET_SERVER_SERVICE, NULL));
 
     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 = max;
 
     if (!(socks = virJSONValueObjectGet(object, "socks"))) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Missing socks field in JSON state document"));
-        goto error;
+        return NULL;
     }
 
     if (!virJSONValueIsArray(socks)) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Malformed socks array"));
-        goto error;
+        return NULL;
     }
 
     n = virJSONValueArraySize(socks);
     if (VIR_ALLOC_N(svc->socks, n) < 0)
-        goto error;
+        return NULL;
     svc->nsocks = n;
 
     for (i = 0; i < svc->nsocks; i++) {
@@ -311,29 +298,25 @@ virNetServerServicePtr virNetServerServiceNewPostExecRestart(virJSONValuePtr obj
 
         if (!(sock = virNetSocketNewPostExecRestart(child))) {
             virObjectUnref(sock);
-            goto error;
+            return NULL;
         }
 
         svc->socks[i] = sock;
 
         /* 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;
         }
     }
 
-    return svc;
-
- error:
-    virObjectUnref(svc);
-    return NULL;
+    return g_steal_pointer(&svc);
 }
 
 
@@ -415,9 +398,9 @@ void virNetServerServiceSetDispatcher(virNetServerServicePtr svc,
 }
 
 
-void virNetServerServiceDispose(void *obj)
+void virNetServerServiceFinalize(GObject *obj)
 {
-    virNetServerServicePtr svc = obj;
+    virNetServerServicePtr svc = VIR_NET_SERVER_SERVICE(obj);
     size_t i;
 
     for (i = 0; i < svc->nsocks; i++)
@@ -425,6 +408,8 @@ void virNetServerServiceDispose(void *obj)
     VIR_FREE(svc->socks);
 
     virObjectUnref(svc->tls);
+
+    G_OBJECT_CLASS(vir_net_server_service_parent_class)->finalize(obj);
 }
 
 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 = NULL;
-    virNetServerServicePtr svc1 = NULL, svc2 = NULL;
+    g_autoptr(virNetServerService) svc1 = NULL, svc2 = NULL;
     virNetServerClientPtr cln1 = NULL, cln2 = NULL;
     virNetSocketPtr sk1 = NULL, sk2 = NULL;
     int fdclient[2];
@@ -170,8 +170,6 @@ testCreateServer(const char *server_name, const char *host, int family)
         virDispatchError(NULL);
     virObjectUnref(cln1);
     virObjectUnref(cln2);
-    virObjectUnref(svc1);
-    virObjectUnref(svc2);
     virObjectUnref(sk1);
     virObjectUnref(sk2);
     return srv;
-- 
2.25.1





More information about the libvir-list mailing list