[PATCH 06/36] conf: convert virDomainXMLOption to GObject

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


Signed-off-by: Rafael Fonseca <r4f4rfs at gmail.com>
---
 src/bhyve/bhyve_driver.c      |  3 ++-
 src/conf/domain_conf.c        | 29 +++++++++++++++++++----------
 src/conf/domain_conf.h        |  9 +++++++++
 src/esx/esx_driver.c          |  3 ++-
 src/libxl/libxl_driver.c      |  3 ++-
 src/lxc/lxc_controller.c      |  3 ++-
 src/lxc/lxc_driver.c          |  3 ++-
 src/openvz/openvz_conf.c      |  3 ++-
 src/qemu/qemu_driver.c        |  3 ++-
 src/qemu/qemu_process.c       | 15 +++++----------
 src/security/virt-aa-helper.c |  3 ++-
 src/test/test_driver.c        |  3 ++-
 src/vbox/vbox_common.c        |  3 ++-
 src/vmware/vmware_conf.c      |  3 ++-
 src/vz/vz_driver.c            |  3 ++-
 tests/bhyveargv2xmltest.c     |  2 +-
 tests/bhyvexml2argvtest.c     |  2 +-
 tests/bhyvexml2xmltest.c      |  2 +-
 tests/domainconftest.c        |  3 ++-
 tests/genericxml2xmltest.c    |  3 ++-
 tests/openvzutilstest.c       |  2 +-
 tests/testutilslxc.c          |  3 ++-
 tests/testutilsqemu.c         |  3 ++-
 tests/testutilsxen.c          |  3 ++-
 tests/vmx2xmltest.c           |  3 ++-
 tests/xml2vmxtest.c           |  6 ++++--
 26 files changed, 77 insertions(+), 44 deletions(-)

diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
index 4ca3666700..2224395128 100644
--- a/src/bhyve/bhyve_driver.c
+++ b/src/bhyve/bhyve_driver.c
@@ -1183,7 +1183,8 @@ bhyveStateCleanup(void)
     virObjectUnref(bhyve_driver->domains);
     if (bhyve_driver->caps)
         g_object_unref(bhyve_driver->caps);
-    virObjectUnref(bhyve_driver->xmlopt);
+    if (bhyve_driver->xmlopt)
+        g_object_unref(bhyve_driver->xmlopt);
     virSysinfoDefFree(bhyve_driver->hostsysinfo);
     virObjectUnref(bhyve_driver->closeCallbacks);
     virObjectUnref(bhyve_driver->domainEventState);
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 425a6bccb6..38a0c04c1f 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -71,7 +71,7 @@ VIR_LOG_INIT("conf.domain_conf");
 /* This structure holds various callbacks and data needed
  * while parsing and creating domain XMLs */
 struct _virDomainXMLOption {
-    virObject parent;
+    GObject parent;
 
     /* XML parser callbacks and defaults */
     virDomainDefParserConfig config;
@@ -1273,18 +1273,26 @@ VIR_ENUM_IMPL(virDomainLaunchSecurity,
 );
 
 static virClassPtr virDomainObjClass;
-static virClassPtr virDomainXMLOptionClass;
 static void virDomainObjDispose(void *obj);
-static void virDomainXMLOptionDispose(void *obj);
+G_DEFINE_TYPE(virDomainXMLOption, vir_domain_xml_option, G_TYPE_OBJECT);
+static void virDomainXMLOptionFinalize(GObject *obj);
+
+static void vir_domain_xml_option_init(virDomainXMLOption *option G_GNUC_UNUSED)
+{
+}
+
+static void vir_domain_xml_option_class_init(virDomainXMLOptionClass *klass)
+{
+    GObjectClass *obj = G_OBJECT_CLASS(klass);
+
+    obj->finalize = virDomainXMLOptionFinalize;
+}
 
 static int virDomainObjOnceInit(void)
 {
     if (!VIR_CLASS_NEW(virDomainObj, virClassForObjectLockable()))
         return -1;
 
-    if (!VIR_CLASS_NEW(virDomainXMLOption, virClassForObject()))
-        return -1;
-
     return 0;
 }
 
@@ -1292,12 +1300,14 @@ VIR_ONCE_GLOBAL_INIT(virDomainObj);
 
 
 static void
-virDomainXMLOptionDispose(void *obj)
+virDomainXMLOptionFinalize(GObject *obj)
 {
-    virDomainXMLOptionPtr xmlopt = obj;
+    virDomainXMLOptionPtr xmlopt = VIR_DOMAIN_XML_OPTION(obj);
 
     if (xmlopt->config.privFree)
         (xmlopt->config.privFree)(xmlopt->config.priv);
+
+    G_OBJECT_CLASS(vir_domain_xml_option_parent_class)->finalize(obj);
 }
 
 /**
@@ -1424,8 +1434,7 @@ virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
     if (virDomainObjInitialize() < 0)
         return NULL;
 
-    if (!(xmlopt = virObjectNew(virDomainXMLOptionClass)))
-        return NULL;
+    xmlopt = VIR_DOMAIN_XML_OPTION(g_object_new(VIR_TYPE_DOMAIN_XML_OPTION, NULL));
 
     if (priv)
         xmlopt->privateData = *priv;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 33875d942f..7e2792ae62 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -58,6 +58,8 @@
 #include "virresctrl.h"
 #include "virenum.h"
 
+#include <glib-object.h>
+
 /* Flags for the 'type' field in virDomainDeviceDef */
 typedef enum {
     VIR_DOMAIN_DEVICE_NONE = 0,
@@ -2800,6 +2802,13 @@ struct _virDomainABIStability {
     virDomainABIStabilityDomain domain;
 };
 
+#define VIR_TYPE_DOMAIN_XML_OPTION vir_domain_xml_option_get_type()
+G_DECLARE_FINAL_TYPE(virDomainXMLOption,
+                     vir_domain_xml_option,
+                     VIR,
+                     DOMAIN_XML_OPTION,
+                     GObject);
+
 virDomainXMLOptionPtr virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
                                             virDomainXMLPrivateDataCallbacksPtr priv,
                                             virXMLNamespacePtr xmlns,
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index f893d112d0..354f5cbe69 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -71,7 +71,8 @@ esxFreePrivate(esxPrivate **priv)
     esxUtil_FreeParsedUri(&(*priv)->parsedUri);
     if ((*priv)->caps)
         g_object_unref((*priv)->caps);
-    virObjectUnref((*priv)->xmlopt);
+    if ((*priv)->xmlopt)
+        g_object_unref((*priv)->xmlopt);
     VIR_FREE(*priv);
 }
 
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 7ec4fcc3d1..6564b45ee4 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -507,7 +507,8 @@ libxlStateCleanup(void)
         return -1;
 
     virObjectUnref(libxl_driver->hostdevMgr);
-    virObjectUnref(libxl_driver->xmlopt);
+    if (libxl_driver->xmlopt)
+        g_object_unref(libxl_driver->xmlopt);
     virObjectUnref(libxl_driver->domains);
     virPortAllocatorRangeFree(libxl_driver->reservedGraphicsPorts);
     virPortAllocatorRangeFree(libxl_driver->migrationPorts);
diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index 2369704ac6..4c038c6228 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -180,7 +180,8 @@ virLXCControllerDriverFree(virLXCDriverPtr driver)
 {
     if (!driver)
         return;
-    virObjectUnref(driver->xmlopt);
+    if (driver->xmlopt)
+        g_object_unref(driver->xmlopt);
     if (driver->caps)
         g_object_unref(driver->caps);
     virMutexDestroy(&driver->lock);
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index 1c59ddef6d..5da9ec7c58 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -1614,7 +1614,8 @@ static int lxcStateCleanup(void)
     if (lxc_driver->caps)
         g_object_unref(lxc_driver->caps);
     virObjectUnref(lxc_driver->securityManager);
-    virObjectUnref(lxc_driver->xmlopt);
+    if (lxc_driver->xmlopt)
+        g_object_unref(lxc_driver->xmlopt);
 
     if (lxc_driver->lockFD != -1)
         virPidFileRelease(lxc_driver->config->stateDir, "driver", lxc_driver->lockFD);
diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
index 1f70bfc3d9..a62e536aa0 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -479,7 +479,8 @@ openvzFreeDriver(struct openvz_driver *driver)
     if (!driver)
         return;
 
-    virObjectUnref(driver->xmlopt);
+    if (driver->xmlopt)
+        g_object_unref(driver->xmlopt);
     virObjectUnref(driver->domains);
     if (driver->caps)
         g_object_unref(driver->caps);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 99a5058033..73f1037e8a 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -1131,7 +1131,8 @@ qemuStateCleanup(void)
     virObjectUnref(qemu_driver->securityManager);
     virObjectUnref(qemu_driver->domainEventState);
     virObjectUnref(qemu_driver->qemuCapsCache);
-    virObjectUnref(qemu_driver->xmlopt);
+    if (qemu_driver->xmlopt)
+        g_object_unref(qemu_driver->xmlopt);
     virCPUDefFree(qemu_driver->hostcpu);
     virCapabilitiesHostNUMAUnref(qemu_driver->hostnuma);
     if (qemu_driver->caps)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 3f28c5245c..ef34dd8cfd 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -8567,9 +8567,8 @@ qemuProcessQMPInitMonitor(qemuMonitorPtr mon)
 static int
 qemuProcessQMPConnectMonitor(qemuProcessQMPPtr proc)
 {
-    virDomainXMLOptionPtr xmlopt = NULL;
+    g_autoptr(virDomainXMLOption) xmlopt = NULL;
     virDomainChrSourceDef monConfig;
-    int ret = -1;
 
     VIR_DEBUG("proc=%p, emulator=%s, proc->pid=%lld",
               proc, proc->binary, (long long)proc->pid);
@@ -8581,25 +8580,21 @@ qemuProcessQMPConnectMonitor(qemuProcessQMPPtr proc)
     if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL)) ||
         !(proc->vm = virDomainObjNew(xmlopt)) ||
         !(proc->vm->def = virDomainDefNew()))
-        goto cleanup;
+        return -1;
 
     proc->vm->pid = proc->pid;
 
     if (!(proc->mon = qemuMonitorOpen(proc->vm, &monConfig, true, 0,
                                       virEventThreadGetContext(proc->eventThread),
                                       &callbacks, NULL)))
-        goto cleanup;
+        return -1;
 
     virObjectLock(proc->mon);
 
     if (qemuProcessQMPInitMonitor(proc->mon) < 0)
-        goto cleanup;
-
-    ret = 0;
+        return -1;
 
- cleanup:
-    virObjectUnref(xmlopt);
-    return ret;
+    return 0;
 }
 
 
diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c
index 7b0ae6acad..cbf4a567d5 100644
--- a/src/security/virt-aa-helper.c
+++ b/src/security/virt-aa-helper.c
@@ -81,7 +81,8 @@ vahDeinit(vahControl * ctl)
     VIR_FREE(ctl->def);
     if (ctl->caps)
         g_object_unref(ctl->caps);
-    virObjectUnref(ctl->xmlopt);
+    if (ctl->xmlopt)
+        g_object_unref(ctl->xmlopt);
     VIR_FREE(ctl->files);
     VIR_FREE(ctl->virtType);
     VIR_FREE(ctl->os);
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 00c3d34a81..1696b956fe 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -160,7 +160,8 @@ testDriverDispose(void *obj)
 
     if (driver->caps)
         g_object_unref(driver->caps);
-    virObjectUnref(driver->xmlopt);
+    if (driver->xmlopt)
+        g_object_unref(driver->xmlopt);
     virObjectUnref(driver->domains);
     virNodeDeviceObjListFree(driver->devs);
     virObjectUnref(driver->networks);
diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index 0e009a5739..60018668ca 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -124,7 +124,8 @@ vboxDriverDispose(void *obj)
 
     if (driver->caps)
         g_object_unref(driver->caps);
-    virObjectUnref(driver->xmlopt);
+    if (driver->xmlopt)
+        g_object_unref(driver->xmlopt);
 }
 
 static int
diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c
index ee21e96971..e5e3ee33a5 100644
--- a/src/vmware/vmware_conf.c
+++ b/src/vmware/vmware_conf.c
@@ -56,7 +56,8 @@ vmwareFreeDriver(struct vmware_driver *driver)
     virObjectUnref(driver->domains);
     if (driver->caps)
         g_object_unref(driver->caps);
-    virObjectUnref(driver->xmlopt);
+    if (driver->xmlopt)
+        g_object_unref(driver->xmlopt);
     VIR_FREE(driver->vmrun);
     VIR_FREE(driver);
 }
diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
index 517259131d..ab06071731 100644
--- a/src/vz/vz_driver.c
+++ b/src/vz/vz_driver.c
@@ -150,7 +150,8 @@ static void vzDriverDispose(void * obj)
     virObjectUnref(driver->domains);
     if (driver->caps)
         g_object_unref(driver->caps);
-    virObjectUnref(driver->xmlopt);
+    if (driver->xmlopt)
+        g_object_unref(driver->xmlopt);
     virObjectUnref(driver->domainEventState);
     virSysinfoDefFree(driver->hostsysinfo);
 }
diff --git a/tests/bhyveargv2xmltest.c b/tests/bhyveargv2xmltest.c
index 5de5b48a8e..3cc6ca8b38 100644
--- a/tests/bhyveargv2xmltest.c
+++ b/tests/bhyveargv2xmltest.c
@@ -196,7 +196,7 @@ mymain(void)
     DO_TEST_FAIL("extraargs");
 
     g_object_unref(driver.caps);
-    virObjectUnref(driver.xmlopt);
+    g_object_unref(driver.xmlopt);
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c
index 9ea0d76f06..48abb436d0 100644
--- a/tests/bhyvexml2argvtest.c
+++ b/tests/bhyvexml2argvtest.c
@@ -250,7 +250,7 @@ mymain(void)
     DO_TEST_FAILURE("cputopology");
 
     g_object_unref(driver.caps);
-    virObjectUnref(driver.xmlopt);
+    g_object_unref(driver.xmlopt);
     virPortAllocatorRangeFree(driver.remotePorts);
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c
index cb0f6022c3..add96d4859 100644
--- a/tests/bhyvexml2xmltest.c
+++ b/tests/bhyvexml2xmltest.c
@@ -128,7 +128,7 @@ mymain(void)
     DO_TEST_DIFFERENT("input-xhci-tablet");
 
     g_object_unref(driver.caps);
-    virObjectUnref(driver.xmlopt);
+    g_object_unref(driver.xmlopt);
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
diff --git a/tests/domainconftest.c b/tests/domainconftest.c
index ada397b925..c19da1ae97 100644
--- a/tests/domainconftest.c
+++ b/tests/domainconftest.c
@@ -105,7 +105,8 @@ mymain(void)
 
     if (caps)
         g_object_unref(caps);
-    virObjectUnref(xmlopt);
+    if (xmlopt)
+        g_object_unref(xmlopt);
 
  cleanup:
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
diff --git a/tests/genericxml2xmltest.c b/tests/genericxml2xmltest.c
index 0659ca1b28..339d1478a3 100644
--- a/tests/genericxml2xmltest.c
+++ b/tests/genericxml2xmltest.c
@@ -197,7 +197,8 @@ mymain(void)
 
     if (caps)
         g_object_unref(caps);
-    virObjectUnref(xmlopt);
+    if (xmlopt)
+        g_object_unref(xmlopt);
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
diff --git a/tests/openvzutilstest.c b/tests/openvzutilstest.c
index 48de2d1c7d..2fd21fc718 100644
--- a/tests/openvzutilstest.c
+++ b/tests/openvzutilstest.c
@@ -131,7 +131,7 @@ testReadNetworkConf(const void *data G_GNUC_UNUSED)
     result = 0;
 
  cleanup:
-    virObjectUnref(driver.xmlopt);
+    g_object_unref(driver.xmlopt);
     g_object_unref(driver.caps);
     VIR_FREE(actual);
     virDomainDefFree(def);
diff --git a/tests/testutilslxc.c b/tests/testutilslxc.c
index 2f28975332..ad2afdd683 100644
--- a/tests/testutilslxc.c
+++ b/tests/testutilslxc.c
@@ -76,7 +76,8 @@ testLXCDriverInit(void)
 void
 testLXCDriverFree(virLXCDriverPtr driver)
 {
-    virObjectUnref(driver->xmlopt);
+    if (driver->xmlopt)
+        g_object_unref(driver->xmlopt);
     if (driver->caps)
         g_object_unref(driver->caps);
     virMutexDestroy(&driver->lock);
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index dd8143ff55..a37865bc14 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -307,7 +307,8 @@ void qemuTestDriverFree(virQEMUDriver *driver)
         virFileDeleteTree(driver->config->configDir);
     }
     virObjectUnref(driver->qemuCapsCache);
-    virObjectUnref(driver->xmlopt);
+    if (driver->xmlopt)
+        g_object_unref(driver->xmlopt);
     if (driver->caps)
         g_object_unref(driver->caps);
     virObjectUnref(driver->config);
diff --git a/tests/testutilsxen.c b/tests/testutilsxen.c
index 7da90cdd1e..6b6b0bf038 100644
--- a/tests/testutilsxen.c
+++ b/tests/testutilsxen.c
@@ -112,7 +112,8 @@ libxlDriverPrivatePtr testXLInitDriver(void)
 void testXLFreeDriver(libxlDriverPrivatePtr driver)
 {
     virObjectUnref(driver->config);
-    virObjectUnref(driver->xmlopt);
+    if (driver->xmlopt)
+        g_object_unref(driver->xmlopt);
     virMutexDestroy(&driver->lock);
     g_free(driver);
 }
diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c
index b5c557fe33..c87b60fc78 100644
--- a/tests/vmx2xmltest.c
+++ b/tests/vmx2xmltest.c
@@ -282,7 +282,8 @@ mymain(void)
     DO_TEST("datacenterpath", "datacenterpath");
 
     g_object_unref(caps);
-    virObjectUnref(xmlopt);
+    if (xmlopt)
+        g_object_unref(xmlopt);
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c
index d6c7eb4f53..735df01e56 100644
--- a/tests/xml2vmxtest.c
+++ b/tests/xml2vmxtest.c
@@ -61,7 +61,8 @@ testCapsInit(void)
  failure:
     if (caps)
         g_clear_object(&caps);
-    virObjectUnref(xmlopt);
+    if (xmlopt)
+        g_object_unref(xmlopt);
 }
 
 static int
@@ -292,7 +293,8 @@ mymain(void)
     DO_TEST("datacenterpath", "datacenterpath", 4);
 
     g_object_unref(caps);
-    virObjectUnref(xmlopt);
+    if (xmlopt)
+        g_object_unref(xmlopt);
 
     return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
-- 
2.25.1





More information about the libvir-list mailing list