[PATCH 05/40] rpc: convert virNetClientProgram to GObject

Rafael Fonseca r4f4rfs at gmail.com
Wed May 13 11:56:49 UTC 2020


Signed-off-by: Rafael Fonseca <r4f4rfs at gmail.com>
---
 src/admin/admin_remote.c        |  9 +++----
 src/locking/lock_driver_lockd.c | 19 +++++++-------
 src/logging/log_manager.c       | 15 +++++------
 src/lxc/lxc_monitor.c           |  2 +-
 src/remote/remote_driver.c      | 46 +++++++++++++++------------------
 src/rpc/virnetclient.c          |  7 ++---
 src/rpc/virnetclientprogram.c   | 29 ++++++---------------
 src/rpc/virnetclientprogram.h   | 10 +++++--
 src/rpc/virnetclientstream.c    |  4 +--
 9 files changed, 62 insertions(+), 79 deletions(-)

diff --git a/src/admin/admin_remote.c b/src/admin/admin_remote.c
index ca5e0c9fe4..c732379695 100644
--- a/src/admin/admin_remote.c
+++ b/src/admin/admin_remote.c
@@ -41,7 +41,7 @@ remoteAdminPrivDispose(void *opaque)
 {
     remoteAdminPrivPtr priv = opaque;
 
-    virObjectUnref(priv->program);
+    g_clear_object(&priv->program);
     virObjectUnref(priv->client);
 }
 
@@ -227,10 +227,9 @@ remoteAdminPrivNew(const char *sock_path)
     if (!(priv->client = virNetClientNewUNIX(sock_path, false, NULL)))
         goto error;
 
-    if (!(priv->program = virNetClientProgramNew(ADMIN_PROGRAM,
-                                                 ADMIN_PROTOCOL_VERSION,
-                                                 NULL, 0, NULL)))
-        goto error;
+    priv->program = virNetClientProgramNew(ADMIN_PROGRAM,
+                                           ADMIN_PROTOCOL_VERSION,
+                                           NULL, 0, NULL);
 
     if (virNetClientAddProgram(priv->client, priv->program) < 0)
         goto error;
diff --git a/src/locking/lock_driver_lockd.c b/src/locking/lock_driver_lockd.c
index bec98dd05f..3101454a1d 100644
--- a/src/locking/lock_driver_lockd.c
+++ b/src/locking/lock_driver_lockd.c
@@ -213,12 +213,11 @@ static virNetClientPtr virLockManagerLockDaemonConnectionNew(bool privileged,
                                        daemonPath)))
         goto error;
 
-    if (!(*prog = virNetClientProgramNew(VIR_LOCK_SPACE_PROTOCOL_PROGRAM,
-                                         VIR_LOCK_SPACE_PROTOCOL_PROGRAM_VERSION,
-                                         NULL,
-                                         0,
-                                         NULL)))
-        goto error;
+    *prog = virNetClientProgramNew(VIR_LOCK_SPACE_PROTOCOL_PROGRAM,
+                                   VIR_LOCK_SPACE_PROTOCOL_PROGRAM_VERSION,
+                                   NULL,
+                                   0,
+                                   NULL);
 
     if (virNetClientAddProgram(client, *prog) < 0)
         goto error;
@@ -233,7 +232,7 @@ static virNetClientPtr virLockManagerLockDaemonConnectionNew(bool privileged,
     VIR_FREE(lockdpath);
     virNetClientClose(client);
     virObjectUnref(client);
-    virObjectUnref(*prog);
+    g_clear_object(prog);
     return NULL;
 }
 
@@ -296,7 +295,7 @@ static int virLockManagerLockDaemonSetupLockspace(const char *path)
     rv = 0;
 
  cleanup:
-    virObjectUnref(program);
+    g_clear_object(&program);
     virNetClientClose(client);
     virObjectUnref(client);
     return rv;
@@ -660,7 +659,7 @@ static int virLockManagerLockDaemonAcquire(virLockManagerPtr lock,
         VIR_FORCE_CLOSE(*fd);
     virNetClientClose(client);
     virObjectUnref(client);
-    virObjectUnref(program);
+    g_clear_object(&program);
 
     return rv;
 }
@@ -713,7 +712,7 @@ static int virLockManagerLockDaemonRelease(virLockManagerPtr lock,
  cleanup:
     virNetClientClose(client);
     virObjectUnref(client);
-    virObjectUnref(program);
+    g_clear_object(&program);
 
     return rv;
 }
diff --git a/src/logging/log_manager.c b/src/logging/log_manager.c
index fd7c2922b3..0428ea4728 100644
--- a/src/logging/log_manager.c
+++ b/src/logging/log_manager.c
@@ -83,12 +83,11 @@ virLogManagerConnect(bool privileged,
                                        daemonPath)))
         goto error;
 
-    if (!(*prog = virNetClientProgramNew(VIR_LOG_MANAGER_PROTOCOL_PROGRAM,
-                                         VIR_LOG_MANAGER_PROTOCOL_PROGRAM_VERSION,
-                                         NULL,
-                                         0,
-                                         NULL)))
-        goto error;
+    *prog = virNetClientProgramNew(VIR_LOG_MANAGER_PROTOCOL_PROGRAM,
+                                   VIR_LOG_MANAGER_PROTOCOL_PROGRAM_VERSION,
+                                   NULL,
+                                   0,
+                                   NULL);
 
     if (virNetClientAddProgram(client, *prog) < 0)
         goto error;
@@ -103,7 +102,7 @@ virLogManagerConnect(bool privileged,
     VIR_FREE(logdpath);
     virNetClientClose(client);
     virObjectUnref(client);
-    virObjectUnref(*prog);
+    g_clear_object(prog);
     return NULL;
 }
 
@@ -135,7 +134,7 @@ virLogManagerFree(virLogManagerPtr mgr)
 
     if (mgr->client)
         virNetClientClose(mgr->client);
-    virObjectUnref(mgr->program);
+    g_clear_object(&mgr->program);
     virObjectUnref(mgr->client);
 
     VIR_FREE(mgr);
diff --git a/src/lxc/lxc_monitor.c b/src/lxc/lxc_monitor.c
index 479125374b..b3d6da6b98 100644
--- a/src/lxc/lxc_monitor.c
+++ b/src/lxc/lxc_monitor.c
@@ -198,7 +198,7 @@ static void virLXCMonitorDispose(void *opaque)
     VIR_DEBUG("mon=%p", mon);
     if (mon->cb.destroy)
         (mon->cb.destroy)(mon, mon->vm);
-    virObjectUnref(mon->program);
+    g_clear_object(&mon->program);
     virObjectUnref(mon->vm);
 }
 
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index 0aeab9db27..961f8f78d9 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -1280,24 +1280,21 @@ doRemoteOpen(virConnectPtr conn,
                                  remoteClientCloseFunc,
                                  priv->closeCallback, virObjectFreeCallback);
 
-    if (!(priv->remoteProgram = virNetClientProgramNew(REMOTE_PROGRAM,
-                                                       REMOTE_PROTOCOL_VERSION,
-                                                       remoteEvents,
-                                                       G_N_ELEMENTS(remoteEvents),
-                                                       conn)))
-        goto failed;
-    if (!(priv->lxcProgram = virNetClientProgramNew(LXC_PROGRAM,
-                                                    LXC_PROTOCOL_VERSION,
-                                                    NULL,
-                                                    0,
-                                                    NULL)))
-        goto failed;
-    if (!(priv->qemuProgram = virNetClientProgramNew(QEMU_PROGRAM,
-                                                     QEMU_PROTOCOL_VERSION,
-                                                     qemuEvents,
-                                                     G_N_ELEMENTS(qemuEvents),
-                                                     conn)))
-        goto failed;
+    priv->remoteProgram = virNetClientProgramNew(REMOTE_PROGRAM,
+                                                 REMOTE_PROTOCOL_VERSION,
+                                                 remoteEvents,
+                                                 G_N_ELEMENTS(remoteEvents),
+                                                 conn);
+    priv->lxcProgram = virNetClientProgramNew(LXC_PROGRAM,
+                                              LXC_PROTOCOL_VERSION,
+                                              NULL,
+                                              0,
+                                              NULL);
+    priv->qemuProgram = virNetClientProgramNew(QEMU_PROGRAM,
+                                               QEMU_PROTOCOL_VERSION,
+                                               qemuEvents,
+                                               G_N_ELEMENTS(qemuEvents),
+                                               conn);
 
     if (virNetClientAddProgram(priv->client, priv->remoteProgram) < 0 ||
         virNetClientAddProgram(priv->client, priv->lxcProgram) < 0 ||
@@ -1369,9 +1366,9 @@ doRemoteOpen(virConnectPtr conn,
     return VIR_DRV_OPEN_SUCCESS;
 
  failed:
-    virObjectUnref(priv->remoteProgram);
-    virObjectUnref(priv->lxcProgram);
-    virObjectUnref(priv->qemuProgram);
+    g_clear_object(&priv->remoteProgram);
+    g_clear_object(&priv->lxcProgram);
+    g_clear_object(&priv->qemuProgram);
     virNetClientClose(priv->client);
     virObjectUnref(priv->client);
     priv->client = NULL;
@@ -1532,10 +1529,9 @@ doRemoteClose(virConnectPtr conn, struct private_data *priv)
     priv->client = NULL;
     virObjectUnref(priv->closeCallback);
     priv->closeCallback = NULL;
-    virObjectUnref(priv->remoteProgram);
-    virObjectUnref(priv->lxcProgram);
-    virObjectUnref(priv->qemuProgram);
-    priv->remoteProgram = priv->qemuProgram = priv->lxcProgram = NULL;
+    g_clear_object(&priv->remoteProgram);
+    g_clear_object(&priv->lxcProgram);
+    g_clear_object(&priv->qemuProgram);
 
     /* Free hostname copy */
     VIR_FREE(priv->hostname);
diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
index 1c5bef86a1..9bec5235b9 100644
--- a/src/rpc/virnetclient.c
+++ b/src/rpc/virnetclient.c
@@ -676,7 +676,6 @@ bool virNetClientHasPassFD(virNetClientPtr client)
 void virNetClientDispose(void *obj)
 {
     virNetClientPtr client = obj;
-    size_t i;
 
     PROBE(RPC_CLIENT_DISPOSE,
           "client=%p", client);
@@ -684,9 +683,7 @@ void virNetClientDispose(void *obj)
     if (client->closeFf)
         client->closeFf(client->closeOpaque);
 
-    for (i = 0; i < client->nprograms; i++)
-        virObjectUnref(client->programs[i]);
-    VIR_FREE(client->programs);
+    virGObjectListFreeCount(client->programs, client->nprograms);
 
     g_main_loop_unref(client->eventLoop);
     g_main_context_unref(client->eventCtx);
@@ -1010,7 +1007,7 @@ int virNetClientAddProgram(virNetClientPtr client,
     if (VIR_EXPAND_N(client->programs, client->nprograms, 1) < 0)
         goto error;
 
-    client->programs[client->nprograms-1] = virObjectRef(prog);
+    client->programs[client->nprograms-1] = g_object_ref(prog);
 
     virObjectUnlock(client);
     return 0;
diff --git a/src/rpc/virnetclientprogram.c b/src/rpc/virnetclientprogram.c
index 4d1a2bc28b..d76f3eaea7 100644
--- a/src/rpc/virnetclientprogram.c
+++ b/src/rpc/virnetclientprogram.c
@@ -38,7 +38,7 @@
 VIR_LOG_INIT("rpc.netclientprogram");
 
 struct _virNetClientProgram {
-    virObject parent;
+    GObject parent;
 
     unsigned program;
     unsigned version;
@@ -47,19 +47,15 @@ struct _virNetClientProgram {
     void *eventOpaque;
 };
 
-static virClassPtr virNetClientProgramClass;
-static void virNetClientProgramDispose(void *obj);
+G_DEFINE_TYPE(virNetClientProgram, vir_net_client_program, G_TYPE_OBJECT);
 
-static int virNetClientProgramOnceInit(void)
+static void vir_net_client_program_init(virNetClientProgram *prg G_GNUC_UNUSED)
 {
-    if (!VIR_CLASS_NEW(virNetClientProgram, virClassForObject()))
-        return -1;
-
-    return 0;
 }
 
-VIR_ONCE_GLOBAL_INIT(virNetClientProgram);
-
+static void vir_net_client_program_class_init(virNetClientProgramClass *klass G_GNUC_UNUSED)
+{
+}
 
 virNetClientProgramPtr virNetClientProgramNew(unsigned program,
                                               unsigned version,
@@ -67,13 +63,9 @@ virNetClientProgramPtr virNetClientProgramNew(unsigned program,
                                               size_t nevents,
                                               void *eventOpaque)
 {
-    virNetClientProgramPtr prog;
+    virNetClientProgramPtr prog =
+        VIR_NET_CLIENT_PROGRAM(g_object_new(VIR_TYPE_NET_CLIENT_PROGRAM, NULL));
 
-    if (virNetClientProgramInitialize() < 0)
-        return NULL;
-
-    if (!(prog = virObjectNew(virNetClientProgramClass)))
-        return NULL;
 
     prog->program = program;
     prog->version = version;
@@ -85,11 +77,6 @@ virNetClientProgramPtr virNetClientProgramNew(unsigned program,
 }
 
 
-void virNetClientProgramDispose(void *obj G_GNUC_UNUSED)
-{
-}
-
-
 unsigned virNetClientProgramGetProgram(virNetClientProgramPtr prog)
 {
     return prog->program;
diff --git a/src/rpc/virnetclientprogram.h b/src/rpc/virnetclientprogram.h
index 1ac0f30023..1f7006d462 100644
--- a/src/rpc/virnetclientprogram.h
+++ b/src/rpc/virnetclientprogram.h
@@ -24,12 +24,18 @@
 #include <rpc/xdr.h>
 
 #include "virnetmessage.h"
-#include "virobject.h"
+#include "internal.h"
+#include <glib-object.h>
 
 typedef struct _virNetClient virNetClient;
 typedef virNetClient *virNetClientPtr;
 
-typedef struct _virNetClientProgram virNetClientProgram;
+#define VIR_TYPE_NET_CLIENT_PROGRAM vir_net_client_program_get_type()
+G_DECLARE_FINAL_TYPE(virNetClientProgram,
+                     vir_net_client_program,
+                     VIR,
+                     NET_CLIENT_PROGRAM,
+                     GObject);
 typedef virNetClientProgram *virNetClientProgramPtr;
 
 typedef struct _virNetClientProgramEvent virNetClientProgramEvent;
diff --git a/src/rpc/virnetclientstream.c b/src/rpc/virnetclientstream.c
index f904eaba31..183eddd98b 100644
--- a/src/rpc/virnetclientstream.c
+++ b/src/rpc/virnetclientstream.c
@@ -145,7 +145,7 @@ virNetClientStreamPtr virNetClientStreamNew(virNetClientProgramPtr prog,
     if (!(st = virObjectLockableNew(virNetClientStreamClass)))
         return NULL;
 
-    st->prog = virObjectRef(prog);
+    st->prog = g_object_ref(prog);
     st->proc = proc;
     st->serial = serial;
     st->allowSkip = allowSkip;
@@ -163,7 +163,7 @@ void virNetClientStreamDispose(void *obj)
         virNetMessageQueueServe(&st->rx);
         virNetMessageFree(msg);
     }
-    virObjectUnref(st->prog);
+    g_clear_object(&st->prog);
 }
 
 bool virNetClientStreamMatches(virNetClientStreamPtr st,
-- 
2.26.2




More information about the libvir-list mailing list