Signed-off-by: Rafael Fonseca <r4f4rfs(a)gmail.com>
---
src/bhyve/bhyve_driver.c | 2 +-
src/conf/domain_conf.c | 29 +++++++++++++++++++----------
src/conf/domain_conf.h | 9 +++++++++
src/esx/esx_driver.c | 2 +-
src/libvirt_private.syms | 1 +
src/libxl/libxl_driver.c | 2 +-
src/lxc/lxc_controller.c | 2 +-
src/lxc/lxc_driver.c | 2 +-
src/openvz/openvz_conf.c | 2 +-
src/qemu/qemu_driver.c | 2 +-
src/qemu/qemu_process.c | 15 +++++----------
src/security/virt-aa-helper.c | 2 +-
src/test/test_driver.c | 2 +-
src/vbox/vbox_common.c | 2 +-
src/vmware/vmware_conf.c | 2 +-
src/vz/vz_driver.c | 2 +-
tests/bhyveargv2xmltest.c | 2 +-
tests/bhyvexml2argvtest.c | 2 +-
tests/bhyvexml2xmltest.c | 2 +-
tests/domainconftest.c | 2 +-
tests/genericxml2xmltest.c | 2 +-
tests/openvzutilstest.c | 2 +-
tests/testutilslxc.c | 2 +-
tests/testutilsqemu.c | 2 +-
tests/testutilsxen.c | 2 +-
tests/vmx2xmltest.c | 2 +-
tests/xml2vmxtest.c | 4 ++--
27 files changed, 58 insertions(+), 44 deletions(-)
diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
index bbaf6ea1f5..6a37c7973b 100644
--- a/src/bhyve/bhyve_driver.c
+++ b/src/bhyve/bhyve_driver.c
@@ -1182,7 +1182,7 @@ bhyveStateCleanup(void)
virObjectUnref(bhyve_driver->domains);
g_clear_object(&bhyve_driver->caps);
- virObjectUnref(bhyve_driver->xmlopt);
+ g_clear_object(&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 301b4b0d84..62f49a598a 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -70,7 +70,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;
@@ -1324,18 +1324,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;
}
@@ -1343,12 +1351,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);
}
/**
@@ -1475,8 +1485,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 ddc75d8de2..20fc734e06 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,
@@ -2876,6 +2878,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 39412f746a..42f6ab9392 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -70,7 +70,7 @@ esxFreePrivate(esxPrivate **priv)
esxVI_Context_Free(&(*priv)->vCenter);
esxUtil_FreeParsedUri(&(*priv)->parsedUri);
g_clear_object(&(*priv)->caps);
- virObjectUnref((*priv)->xmlopt);
+ g_clear_object(&(*priv)->xmlopt);
VIR_FREE(*priv);
}
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 88fdc1a3a8..ed7813ce0e 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -219,6 +219,7 @@ virSEVCapabilitiesFree;
# conf/domain_conf.h
+vir_domain_xml_option_get_type;
virBlkioDeviceArrayClear;
virDiskNameParse;
virDiskNameToBusDeviceIndex;
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 63ec0a2188..0e465f7d05 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -507,7 +507,7 @@ libxlStateCleanup(void)
return -1;
virObjectUnref(libxl_driver->hostdevMgr);
- virObjectUnref(libxl_driver->xmlopt);
+ g_clear_object(&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 f078c1c425..0aa56f6d24 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -180,7 +180,7 @@ virLXCControllerDriverFree(virLXCDriverPtr driver)
{
if (!driver)
return;
- virObjectUnref(driver->xmlopt);
+ g_clear_object(&driver->xmlopt);
g_clear_object(&driver->caps);
virMutexDestroy(&driver->lock);
g_free(driver);
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index b76e2a4f15..c34bcd5397 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -1614,7 +1614,7 @@ static int lxcStateCleanup(void)
virObjectUnref(lxc_driver->hostdevMgr);
g_clear_object(&lxc_driver->caps);
virObjectUnref(lxc_driver->securityManager);
- virObjectUnref(lxc_driver->xmlopt);
+ g_clear_object(&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 0d11d71dfd..474f75840f 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -479,7 +479,7 @@ openvzFreeDriver(struct openvz_driver *driver)
if (!driver)
return;
- virObjectUnref(driver->xmlopt);
+ g_clear_object(&driver->xmlopt);
virObjectUnref(driver->domains);
g_clear_object(&driver->caps);
VIR_FREE(driver);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index e5b34b1f98..13d3948bd6 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -1121,7 +1121,7 @@ qemuStateCleanup(void)
virObjectUnref(qemu_driver->securityManager);
virObjectUnref(qemu_driver->domainEventState);
virObjectUnref(qemu_driver->qemuCapsCache);
- virObjectUnref(qemu_driver->xmlopt);
+ g_clear_object(&qemu_driver->xmlopt);
virCPUDefFree(qemu_driver->hostcpu);
virCapabilitiesHostNUMAUnref(qemu_driver->hostnuma);
g_clear_object(&qemu_driver->caps);
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 57700438e9..0d9a83ab89 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -8560,9 +8560,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);
@@ -8574,25 +8573,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 370efd8dd1..d8e4ef9111 100644
--- a/src/security/virt-aa-helper.c
+++ b/src/security/virt-aa-helper.c
@@ -80,7 +80,7 @@ vahDeinit(vahControl * ctl)
VIR_FREE(ctl->def);
g_clear_object(&ctl->caps);
- virObjectUnref(ctl->xmlopt);
+ g_clear_object(&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 d824d12baf..d1e9b6cd49 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -159,7 +159,7 @@ testDriverDispose(void *obj)
size_t i;
g_clear_object(&driver->caps);
- virObjectUnref(driver->xmlopt);
+ g_clear_object(&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 febf843cd5..7ca314d0dc 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -123,7 +123,7 @@ vboxDriverDispose(void *obj)
vboxDriverPtr driver = obj;
g_clear_object(&driver->caps);
- virObjectUnref(driver->xmlopt);
+ g_clear_object(&driver->xmlopt);
}
static int
diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c
index 017df7237f..1779edaf68 100644
--- a/src/vmware/vmware_conf.c
+++ b/src/vmware/vmware_conf.c
@@ -55,7 +55,7 @@ vmwareFreeDriver(struct vmware_driver *driver)
virMutexDestroy(&driver->lock);
virObjectUnref(driver->domains);
g_clear_object(&driver->caps);
- virObjectUnref(driver->xmlopt);
+ g_clear_object(&driver->xmlopt);
VIR_FREE(driver->vmrun);
VIR_FREE(driver);
}
diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
index 85dac9a682..4fe072233e 100644
--- a/src/vz/vz_driver.c
+++ b/src/vz/vz_driver.c
@@ -149,7 +149,7 @@ static void vzDriverDispose(void * obj)
prlsdkDisconnect(driver);
virObjectUnref(driver->domains);
g_clear_object(&driver->caps);
- virObjectUnref(driver->xmlopt);
+ g_clear_object(&driver->xmlopt);
virObjectUnref(driver->domainEventState);
virSysinfoDefFree(driver->hostsysinfo);
}
diff --git a/tests/bhyveargv2xmltest.c b/tests/bhyveargv2xmltest.c
index 3150c4583f..7abbf9a7fd 100644
--- a/tests/bhyveargv2xmltest.c
+++ b/tests/bhyveargv2xmltest.c
@@ -196,7 +196,7 @@ mymain(void)
DO_TEST_FAIL("extraargs");
g_clear_object(&driver.caps);
- virObjectUnref(driver.xmlopt);
+ g_clear_object(&driver.xmlopt);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c
index 0429394246..0f2caa011b 100644
--- a/tests/bhyvexml2argvtest.c
+++ b/tests/bhyvexml2argvtest.c
@@ -250,7 +250,7 @@ mymain(void)
DO_TEST_FAILURE("cputopology");
g_clear_object(&driver.caps);
- virObjectUnref(driver.xmlopt);
+ g_clear_object(&driver.xmlopt);
virPortAllocatorRangeFree(driver.remotePorts);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c
index 27b9abb204..782741aab7 100644
--- a/tests/bhyvexml2xmltest.c
+++ b/tests/bhyvexml2xmltest.c
@@ -128,7 +128,7 @@ mymain(void)
DO_TEST_DIFFERENT("input-xhci-tablet");
g_clear_object(&driver.caps);
- virObjectUnref(driver.xmlopt);
+ g_clear_object(&driver.xmlopt);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
diff --git a/tests/domainconftest.c b/tests/domainconftest.c
index 54fdd72c25..361628dcf4 100644
--- a/tests/domainconftest.c
+++ b/tests/domainconftest.c
@@ -104,7 +104,7 @@ mymain(void)
DO_TEST_GET_FS("/doesnotexist", false);
g_clear_object(&caps);
- virObjectUnref(xmlopt);
+ g_clear_object(&xmlopt);
cleanup:
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
diff --git a/tests/genericxml2xmltest.c b/tests/genericxml2xmltest.c
index a92f5dc613..139e2326ff 100644
--- a/tests/genericxml2xmltest.c
+++ b/tests/genericxml2xmltest.c
@@ -199,7 +199,7 @@ mymain(void)
g_clear_object(&caps);
- virObjectUnref(xmlopt);
+ g_clear_object(&xmlopt);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
diff --git a/tests/openvzutilstest.c b/tests/openvzutilstest.c
index 124f17c3ce..00ed653835 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_clear_object(&driver.xmlopt);
g_clear_object(&driver.caps);
VIR_FREE(actual);
virDomainDefFree(def);
diff --git a/tests/testutilslxc.c b/tests/testutilslxc.c
index bffc3ba440..c871f3b920 100644
--- a/tests/testutilslxc.c
+++ b/tests/testutilslxc.c
@@ -76,7 +76,7 @@ testLXCDriverInit(void)
void
testLXCDriverFree(virLXCDriverPtr driver)
{
- virObjectUnref(driver->xmlopt);
+ g_clear_object(&driver->xmlopt);
g_clear_object(&driver->caps);
virMutexDestroy(&driver->lock);
g_free(driver);
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index ea0a89e902..396c069bd2 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -307,7 +307,7 @@ void qemuTestDriverFree(virQEMUDriver *driver)
virFileDeleteTree(driver->config->configDir);
}
virObjectUnref(driver->qemuCapsCache);
- virObjectUnref(driver->xmlopt);
+ g_clear_object(&driver->xmlopt);
g_clear_object(&driver->caps);
virObjectUnref(driver->config);
virObjectUnref(driver->securityManager);
diff --git a/tests/testutilsxen.c b/tests/testutilsxen.c
index 7da90cdd1e..d680fe36e3 100644
--- a/tests/testutilsxen.c
+++ b/tests/testutilsxen.c
@@ -112,7 +112,7 @@ libxlDriverPrivatePtr testXLInitDriver(void)
void testXLFreeDriver(libxlDriverPrivatePtr driver)
{
virObjectUnref(driver->config);
- virObjectUnref(driver->xmlopt);
+ g_clear_object(&driver->xmlopt);
virMutexDestroy(&driver->lock);
g_free(driver);
}
diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c
index 613331cabc..07cb718f12 100644
--- a/tests/vmx2xmltest.c
+++ b/tests/vmx2xmltest.c
@@ -282,7 +282,7 @@ mymain(void)
DO_TEST("datacenterpath", "datacenterpath");
g_clear_object(&caps);
- virObjectUnref(xmlopt);
+ g_clear_object(&xmlopt);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c
index 5d5fb8e69a..58e8adafcb 100644
--- a/tests/xml2vmxtest.c
+++ b/tests/xml2vmxtest.c
@@ -60,7 +60,7 @@ testCapsInit(void)
failure:
g_clear_object(&caps);
- virObjectUnref(xmlopt);
+ g_clear_object(&xmlopt);
}
static int
@@ -291,7 +291,7 @@ mymain(void)
DO_TEST("datacenterpath", "datacenterpath", 4);
g_clear_object(&caps);
- virObjectUnref(xmlopt);
+ g_clear_object(&xmlopt);
return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
--
2.26.2