[PATCH 08/40] bhyve: convert bhyveMonitor to GObject

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


Signed-off-by: Rafael Fonseca <r4f4rfs at gmail.com>
---
 src/bhyve/bhyve_monitor.c | 37 ++++++++++++++++++++-----------------
 src/bhyve/bhyve_monitor.h |  3 ++-
 2 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/src/bhyve/bhyve_monitor.c b/src/bhyve/bhyve_monitor.c
index e5cd39a086..20633cd320 100644
--- a/src/bhyve/bhyve_monitor.c
+++ b/src/bhyve/bhyve_monitor.c
@@ -39,7 +39,7 @@
 VIR_LOG_INIT("bhyve.bhyve_monitor");
 
 struct _bhyveMonitor {
-    virObject parent;
+    GObject parent;
 
     bhyveConnPtr driver;
     virDomainObjPtr vm;
@@ -48,44 +48,48 @@ struct _bhyveMonitor {
     bool reboot;
 };
 
-static virClassPtr bhyveMonitorClass;
+G_DEFINE_TYPE(bhyveMonitor, bhyve_monitor, G_TYPE_OBJECT);
 
 static void
-bhyveMonitorDispose(void *obj)
+bhyveMonitorFinalize(GObject *obj)
 {
-    bhyveMonitorPtr mon = obj;
+    bhyveMonitorPtr mon = BHYVE_MONITOR(obj);
 
     VIR_FORCE_CLOSE(mon->kq);
     virObjectUnref(mon->vm);
+
+    G_OBJECT_CLASS(bhyve_monitor_parent_class)->finalize(obj);
 }
 
-static int
-bhyveMonitorOnceInit(void)
+static void
+bhyve_monitor_init(bhyveMonitor *mon G_GNUC_UNUSED)
 {
-    if (!VIR_CLASS_NEW(bhyveMonitor, virClassForObject()))
-        return -1;
-
-    return 0;
 }
 
-VIR_ONCE_GLOBAL_INIT(bhyveMonitor);
+static void
+bhyve_monitor_class_init(bhyveMonitorClass *klass)
+{
+    GObjectClass *obj = G_OBJECT_CLASS(klass);
+
+    obj->finalize = bhyveMonitorFinalize;
+}
 
 static void bhyveMonitorIO(int, int, int, void *);
 
 static bool
 bhyveMonitorRegister(bhyveMonitorPtr mon)
 {
-    virObjectRef(mon);
+    g_object_ref(mon);
     mon->watch = virEventAddHandle(mon->kq,
                                    VIR_EVENT_HANDLE_READABLE |
                                    VIR_EVENT_HANDLE_ERROR |
                                    VIR_EVENT_HANDLE_HANGUP,
                                    bhyveMonitorIO,
                                    mon,
-                                   virObjectFreeCallback);
+                                   g_object_unref);
     if (mon->watch < 0) {
         VIR_DEBUG("failed to add event handle for mon %p", mon);
-        virObjectUnref(mon);
+        g_object_unref(mon);
         return false;
     }
     return true;
@@ -181,8 +185,7 @@ bhyveMonitorOpenImpl(virDomainObjPtr vm, bhyveConnPtr driver)
     if (bhyveMonitorInitialize() < 0)
         return NULL;
 
-    if (!(mon = virObjectNew(bhyveMonitorClass)))
-        return NULL;
+    mon = BHYVE_MONITOR(g_object_new(BHYVE_TYPE_MONITOR, NULL));
 
     mon->driver = driver;
     mon->reboot = false;
@@ -238,5 +241,5 @@ bhyveMonitorClose(bhyveMonitorPtr mon)
     VIR_DEBUG("cleaning up bhyveMonitor %p", mon);
 
     bhyveMonitorUnregister(mon);
-    virObjectUnref(mon);
+    g_clear_object(&mon);
 }
diff --git a/src/bhyve/bhyve_monitor.h b/src/bhyve/bhyve_monitor.h
index 175cc87192..dcc6929696 100644
--- a/src/bhyve/bhyve_monitor.h
+++ b/src/bhyve/bhyve_monitor.h
@@ -24,7 +24,8 @@
 #include "domain_conf.h"
 #include "bhyve_utils.h"
 
-typedef struct _bhyveMonitor bhyveMonitor;
+#define BHYVE_TYPE_MONITOR bhyve_monitor_get_type()
+G_DECLARE_FINAL_TYPE(bhyveMonitor, bhyve_monitor, BHYVE, MONITOR, GObject);
 typedef bhyveMonitor *bhyveMonitorPtr;
 
 bhyveMonitorPtr bhyveMonitorOpen(virDomainObjPtr vm, bhyveConnPtr driver);
-- 
2.26.2




More information about the libvir-list mailing list