On Fri, 2020-04-03 at 17:15 +0200, Rafael Fonseca wrote:
virFileCache had to also be changed to properly unref the QEMUCaps
objects; in turn, virfilecachetest was also converted to GObject so
it
plays nicely with virFileCache.
There is still some documentation in virfilecache.h that says that the
virFileCacheNewDataPtr function must return an instance of virObject.
Signed-off-by: Rafael Fonseca <r4f4rfs(a)gmail.com>
---
src/qemu/qemu_capabilities.c | 119 +++++++++++++++----------------
----
src/qemu/qemu_capabilities.h | 9 ++-
src/qemu/qemu_domain.c | 8 +--
src/qemu/qemu_process.c | 3 +-
src/util/virfilecache.c | 13 ++--
tests/cputest.c | 14 ++---
tests/domaincapstest.c | 3 +-
tests/qemublocktest.c | 3 +-
tests/qemucapabilitiestest.c | 9 +--
tests/qemucaps2xmltest.c | 16 ++---
tests/qemucapsprobe.c | 4 +-
tests/qemumemlocktest.c | 3 +-
tests/testutilsqemu.c | 18 +++---
tests/virfilecachetest.c | 53 +++++++---------
14 files changed, 118 insertions(+), 157 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c
b/src/qemu/qemu_capabilities.c
index 4bbd14f7ad..36a8467f2c 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -639,7 +639,7 @@ static void virQEMUDomainCapsCacheDispose(void
*obj)
* And don't forget to update virQEMUCapsNewCopy.
*/
struct _virQEMUCaps {
- virObject parent;
+ GObject parent;
bool kvmSupportsNesting;
@@ -677,14 +677,23 @@ struct virQEMUCapsSearchData {
};
-static virClassPtr virQEMUCapsClass;
-static void virQEMUCapsDispose(void *obj);
+G_DEFINE_TYPE(virQEMUCaps, vir_qemu_caps, G_TYPE_OBJECT);
-static int virQEMUCapsOnceInit(void)
+static void virQEMUCapsFinalize(GObject *obj);
+
+static void vir_qemu_caps_init(virQEMUCaps *caps G_GNUC_UNUSED)
{
- if (!VIR_CLASS_NEW(virQEMUCaps, virClassForObject()))
- return -1;
+}
+static void vir_qemu_caps_class_init(virQEMUCapsClass *klass)
+{
+ GObjectClass *obj = G_OBJECT_CLASS(klass);
+
+ obj->finalize = virQEMUCapsFinalize;
+}
+
+static int virQEMUCapsOnceInit(void)
+{
if (!(VIR_CLASS_NEW(virQEMUDomainCapsCache,
virClassForObjectLockable())))
return -1;
@@ -864,7 +873,7 @@ virQEMUCapsInitGuest(virCapsPtr caps,
virArch guestarch)
{
char *binary = NULL;
- virQEMUCapsPtr qemuCaps = NULL;
+ g_autoptr(virQEMUCaps) qemuCaps = NULL;
int ret = -1;
binary = virQEMUCapsGetDefaultEmulator(hostarch, guestarch);
@@ -882,7 +891,6 @@ virQEMUCapsInitGuest(virCapsPtr caps,
guestarch);
VIR_FREE(binary);
- virObjectUnref(qemuCaps);
return ret;
}
@@ -1633,7 +1641,7 @@ int virQEMUCapsGetDefaultVersion(virCapsPtr
caps,
virFileCachePtr capsCache,
unsigned int *version)
{
- virQEMUCapsPtr qemucaps;
+ g_autoptr(virQEMUCaps) qemucaps = NULL;
virArch hostarch;
virCapsDomainDataPtr capsdata;
@@ -1656,7 +1664,6 @@ int virQEMUCapsGetDefaultVersion(virCapsPtr
caps,
return -1;
*version = virQEMUCapsGetVersion(qemucaps);
- virObjectUnref(qemucaps);
return 0;
}
@@ -1682,26 +1689,17 @@ virQEMUDomainCapsCacheNew(void)
virQEMUCapsPtr
virQEMUCapsNew(void)
{
- virQEMUCapsPtr qemuCaps;
-
- if (virQEMUCapsInitialize() < 0)
- return NULL;
-
- if (!(qemuCaps = virObjectNew(virQEMUCapsClass)))
- return NULL;
+ g_autoptr(virQEMUCaps) qemuCaps =
+ VIR_QEMU_CAPS(g_object_new(VIR_TYPE_QEMU_CAPS, NULL));
qemuCaps->invalidation = true;
if (!(qemuCaps->flags = virBitmapNew(QEMU_CAPS_LAST)))
- goto error;
+ return NULL;
if (!(qemuCaps->domCapsCache = virQEMUDomainCapsCacheNew()))
- goto error;
-
- return qemuCaps;
+ return NULL;
- error:
- virObjectUnref(qemuCaps);
- return NULL;
+ return g_steal_pointer(&qemuCaps);
}
@@ -1709,6 +1707,8 @@ virQEMUCapsPtr
virQEMUCapsNewBinary(const char *binary)
{
virQEMUCapsPtr qemuCaps = virQEMUCapsNew();
+ if (!qemuCaps)
+ return NULL;
if (qemuCaps)
qemuCaps->binary = g_strdup(binary);
@@ -1818,7 +1818,7 @@ virQEMUCapsAccelCopy(virQEMUCapsAccelPtr dst,
virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps)
{
- virQEMUCapsPtr ret = virQEMUCapsNewBinary(qemuCaps->binary);
+ g_autoptr(virQEMUCaps) ret = virQEMUCapsNewBinary(qemuCaps-
>binary);
size_t i;
if (!ret)
@@ -1842,10 +1842,10 @@ virQEMUCapsPtr
virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps)
if (virQEMUCapsAccelCopy(&ret->kvm, &qemuCaps->kvm) < 0 ||
virQEMUCapsAccelCopy(&ret->tcg, &qemuCaps->tcg) < 0)
- goto error;
+ return NULL;
if (VIR_ALLOC_N(ret->gicCapabilities, qemuCaps-
>ngicCapabilities) < 0)
- goto error;
+ return NULL;
ret->ngicCapabilities = qemuCaps->ngicCapabilities;
for (i = 0; i < qemuCaps->ngicCapabilities; i++)
ret->gicCapabilities[i] = qemuCaps->gicCapabilities[i];
@@ -1853,13 +1853,9 @@ virQEMUCapsPtr
virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps)
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SEV_GUEST) &&
virQEMUCapsSEVInfoCopy(&ret->sevCapabilities,
qemuCaps->sevCapabilities) < 0)
- goto error;
-
- return ret;
+ return NULL;
- error:
- virObjectUnref(ret);
- return NULL;
+ return g_steal_pointer(&ret);
}
@@ -1880,9 +1876,9 @@ virQEMUCapsAccelClear(virQEMUCapsAccelPtr caps)
}
-void virQEMUCapsDispose(void *obj)
+void virQEMUCapsFinalize(GObject *obj)
{
- virQEMUCapsPtr qemuCaps = obj;
+ virQEMUCapsPtr qemuCaps = VIR_QEMU_CAPS(obj);
virObjectUnref(qemuCaps->domCapsCache);
virBitmapFree(qemuCaps->flags);
@@ -1897,6 +1893,8 @@ void virQEMUCapsDispose(void *obj)
virQEMUCapsAccelClear(&qemuCaps->kvm);
virQEMUCapsAccelClear(&qemuCaps->tcg);
+
+ G_OBJECT_CLASS(vir_qemu_caps_parent_class)->finalize(obj);
}
void
@@ -5142,18 +5140,18 @@ virQEMUCapsNewForBinaryInternal(virArch
hostArch,
unsigned int microcodeVersion,
const char *kernelVersion)
{
- virQEMUCapsPtr qemuCaps;
+ g_autoptr(virQEMUCaps) qemuCaps = NULL;
struct stat sb;
if (!(qemuCaps = virQEMUCapsNewBinary(binary)))
- goto error;
+ return NULL;
/* We would also want to check faccessat if we cared about ACLs,
* but we don't. */
if (stat(binary, &sb) < 0) {
virReportSystemError(errno, _("Cannot check QEMU binary
%s"),
binary);
- goto error;
+ return NULL;
}
qemuCaps->ctime = sb.st_ctime;
@@ -5164,11 +5162,11 @@ virQEMUCapsNewForBinaryInternal(virArch
hostArch,
if (!virFileIsExecutable(binary)) {
virReportSystemError(errno, _("QEMU binary %s is not
executable"),
binary);
- goto error;
+ return NULL;
}
if (virQEMUCapsInitQMP(qemuCaps, libDir, runUid, runGid) < 0)
- goto error;
+ return NULL;
qemuCaps->libvirtCtime = virGetSelfLastChanged();
qemuCaps->libvirtVersion = LIBVIR_VERSION_NUMBER;
@@ -5184,11 +5182,7 @@ virQEMUCapsNewForBinaryInternal(virArch
hostArch,
qemuCaps->kvmSupportsNesting =
virQEMUCapsKVMSupportsNesting();
}
- return qemuCaps;
-
- error:
- virObjectUnref(qemuCaps);
- return NULL;
+ return g_steal_pointer(&qemuCaps);
}
static void *
@@ -5212,20 +5206,16 @@ virQEMUCapsLoadFile(const char *filename,
const char *binary,
void *privData)
{
- virQEMUCapsPtr qemuCaps = virQEMUCapsNewBinary(binary);
+ g_autoptr(virQEMUCaps) qemuCaps = virQEMUCapsNewBinary(binary);
virQEMUCapsCachePrivPtr priv = privData;
if (!qemuCaps)
return NULL;
if (virQEMUCapsLoadCache(priv->hostArch, qemuCaps, filename) <
0)
- goto error;
-
- return qemuCaps;
+ return NULL;
- error:
- virObjectUnref(qemuCaps);
- return NULL;
+ return g_steal_pointer(&qemuCaps);
}
@@ -5341,15 +5331,13 @@ virQEMUCapsCacheLookupCopy(virFileCachePtr
cache,
const char *binary,
const char *machineType)
{
- virQEMUCapsPtr qemuCaps = virQEMUCapsCacheLookup(cache, binary);
+ g_autoptr(virQEMUCaps) qemuCaps = virQEMUCapsCacheLookup(cache,
binary);
virQEMUCapsPtr ret;
if (!qemuCaps)
return NULL;
ret = virQEMUCapsNewCopy(qemuCaps);
- virObjectUnref(qemuCaps);
-
if (!ret)
return NULL;
@@ -5453,8 +5441,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr
cache,
virArch hostarch = virArchFromHost();
virArch arch = hostarch;
virDomainVirtType capsType;
- virQEMUCapsPtr qemuCaps = NULL;
- virQEMUCapsPtr ret = NULL;
+ g_autoptr(virQEMUCaps) qemuCaps = NULL;
virArch arch_from_caps;
g_autofree char *probedbinary = NULL;
@@ -5462,14 +5449,14 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr
cache,
(virttype = virDomainVirtTypeFromString(virttypeStr)) < 0) {
virReportError(VIR_ERR_INVALID_ARG,
_("unknown virttype: %s"), virttypeStr);
- goto cleanup;
+ return NULL;
}
if (archStr &&
(arch = virArchFromString(archStr)) == VIR_ARCH_NONE) {
virReportError(VIR_ERR_INVALID_ARG,
_("unknown architecture: %s"), archStr);
- goto cleanup;
+ return NULL;
}
if (!binary) {
@@ -5478,7 +5465,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr
cache,
}
if (!(qemuCaps = virQEMUCapsCacheLookup(cache, binary)))
- goto cleanup;
+ return NULL;
arch_from_caps = virQEMUCapsGetArch(qemuCaps);
@@ -5492,7 +5479,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr
cache,
"match given architecture '%s'"),
virArchToString(arch_from_caps),
virArchToString(arch));
- goto cleanup;
+ return NULL;
}
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
@@ -5507,7 +5494,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr
cache,
virReportError(VIR_ERR_INVALID_ARG,
_("KVM is not supported by '%s' on this
host"),
binary);
- goto cleanup;
+ return NULL;
}
if (machine) {
@@ -5518,7 +5505,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr
cache,
virReportError(VIR_ERR_INVALID_ARG,
_("the machine '%s' is not supported by
emulator '%s'"),
machine, binary);
- goto cleanup;
+ return NULL;
}
} else {
machine = virQEMUCapsGetPreferredMachine(qemuCaps,
virttype);
@@ -5531,11 +5518,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr
cache,
if (retMachine)
*retMachine = machine;
- ret = g_steal_pointer(&qemuCaps);
-
- cleanup:
- virObjectUnref(qemuCaps);
- return ret;
+ return g_steal_pointer(&qemuCaps);
}
bool
diff --git a/src/qemu/qemu_capabilities.h
b/src/qemu/qemu_capabilities.h
index 51ec1a5165..0602c23b10 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -21,7 +21,9 @@
#pragma once
-#include "virobject.h"
+#include "internal.h"
+#include <glib-object.h>
+
#include "capabilities.h"
#include "vircommand.h"
#include "qemu_monitor.h"
@@ -553,10 +555,11 @@ typedef enum { /* virQEMUCapsFlags grouping
marker for syntax-check */
QEMU_CAPS_LAST /* this must always be the last item */
} virQEMUCapsFlags;
-typedef struct _virQEMUCaps virQEMUCaps;
+#define VIR_TYPE_QEMU_CAPS vir_qemu_caps_get_type()
+G_DECLARE_FINAL_TYPE(virQEMUCaps, vir_qemu_caps, VIR, QEMU_CAPS,
GObject);
+
typedef virQEMUCaps *virQEMUCapsPtr;
-G_DEFINE_AUTOPTR_CLEANUP_FUNC(virQEMUCaps, virObjectUnref);
virQEMUCapsPtr virQEMUCapsNew(void);
virQEMUCapsPtr virQEMUCapsNewBinary(const char *binary);
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 0ae0547b86..32dd69892a 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2249,8 +2249,8 @@
qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr priv)
VIR_FREE(priv->machineName);
- virObjectUnref(priv->qemuCaps);
- priv->qemuCaps = NULL;
+ if (priv->qemuCaps)
+ g_clear_object(&priv->qemuCaps);
VIR_FREE(priv->pidfile);
@@ -6024,7 +6024,7 @@ qemuDomainPostParseDataFree(void *parseOpaque)
{
virQEMUCapsPtr qemuCaps = parseOpaque;
- virObjectUnref(qemuCaps);
+ g_object_unref(qemuCaps);
}
@@ -6867,7 +6867,7 @@ qemuDomainDefFormatBufInternal(virQEMUDriverPtr
driver,
g_autoptr(virQEMUCaps) qCaps = NULL;
if (qemuCaps) {
- qCaps = virObjectRef(qemuCaps);
+ qCaps = g_object_ref(qemuCaps);
} else {
if (!(qCaps = virQEMUCapsCacheLookupCopy(driver-
>qemuCapsCache,
def->virtType,
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 6b9f6fb860..3f28c5245c 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -5491,7 +5491,8 @@ qemuProcessPrepareQEMUCaps(virDomainObjPtr vm,
qemuDomainObjPrivatePtr priv = vm->privateData;
size_t i;
- virObjectUnref(priv->qemuCaps);
+ if (priv->qemuCaps)
+ g_object_unref(priv->qemuCaps);
if (!(priv->qemuCaps = virQEMUCapsCacheLookupCopy(qemuCapsCache,
vm->def-
>virtType,
vm->def-
>emulator,
diff --git a/src/util/virfilecache.c b/src/util/virfilecache.c
index aecabf173d..e9b4211861 100644
--- a/src/util/virfilecache.c
+++ b/src/util/virfilecache.c
@@ -34,6 +34,7 @@
#include "virlog.h"
#include "virobject.h"
#include "virstring.h"
+#include <glib-object.h>
#include <sys/stat.h>
#include <sys/types.h>
@@ -169,7 +170,8 @@ virFileCacheLoad(virFileCachePtr cache,
*data = g_steal_pointer(&loadData);
cleanup:
- virObjectUnref(loadData);
+ if (loadData)
+ g_object_unref(loadData);
return ret;
}
@@ -206,7 +208,7 @@ virFileCacheNewData(virFileCachePtr cache,
return NULL;
if (virFileCacheSave(cache, name, data) < 0) {
- virObjectUnref(data);
+ g_object_unref(data);
data = NULL;
}
}
@@ -275,8 +277,7 @@ virFileCacheValidate(virFileCachePtr cache,
if (*data) {
VIR_DEBUG("Caching data '%p' for '%s'", *data,
name);
if (virHashAddEntry(cache->table, name, *data) < 0) {
- virObjectUnref(*data);
- *data = NULL;
+ g_clear_object(data);
}
}
}
@@ -306,7 +307,7 @@ virFileCacheLookup(virFileCachePtr cache,
data = virHashLookup(cache->table, name);
virFileCacheValidate(cache, name, &data);
- virObjectRef(data);
+ g_object_ref(data);
virObjectUnlock(cache);
return data;
@@ -337,7 +338,7 @@ virFileCacheLookupByFunc(virFileCachePtr cache,
data = virHashSearch(cache->table, iter, iterData, (void
**)&name);
virFileCacheValidate(cache, name, &data);
- virObjectRef(data);
+ g_object_ref(data);
virObjectUnlock(cache);
return data;
diff --git a/tests/cputest.c b/tests/cputest.c
index 1f59f0d3a9..4590bfacee 100644
--- a/tests/cputest.c
+++ b/tests/cputest.c
@@ -519,8 +519,8 @@ cpuTestMakeQEMUCaps(const struct data *data)
return qemuCaps;
error:
- virObjectUnref(qemuCaps);
- qemuCaps = NULL;
+ if (qemuCaps)
+ g_clear_object(&qemuCaps);
goto cleanup;
}
@@ -529,7 +529,7 @@ static int
cpuTestGetCPUModels(const struct data *data,
virDomainCapsCPUModelsPtr *models)
{
- virQEMUCapsPtr qemuCaps;
+ g_autoptr(virQEMUCaps) qemuCaps = NULL;
*models = NULL;
@@ -542,8 +542,6 @@ cpuTestGetCPUModels(const struct data *data,
*models = virQEMUCapsGetCPUModels(qemuCaps, VIR_DOMAIN_VIRT_KVM,
NULL, NULL);
- virObjectUnref(qemuCaps);
-
return 0;
}
@@ -876,7 +874,7 @@ static int
cpuTestJSONCPUID(const void *arg)
{
const struct data *data = arg;
- virQEMUCapsPtr qemuCaps = NULL;
+ g_autoptr(virQEMUCaps) qemuCaps = NULL;
virCPUDefPtr cpu = NULL;
char *result = NULL;
int ret = -1;
@@ -898,7 +896,6 @@ cpuTestJSONCPUID(const void *arg)
ret = cpuTestCompareXML(data->arch, cpu, result);
cleanup:
- virObjectUnref(qemuCaps);
virCPUDefFree(cpu);
VIR_FREE(result);
return ret;
@@ -909,7 +906,7 @@ static int
cpuTestJSONSignature(const void *arg)
{
const struct data *data = arg;
- virQEMUCapsPtr qemuCaps = NULL;
+ g_autoptr(virQEMUCaps) qemuCaps = NULL;
virCPUDataPtr hostData = NULL;
qemuMonitorCPUModelInfoPtr modelInfo;
int ret = -1;
@@ -924,7 +921,6 @@ cpuTestJSONSignature(const void *arg)
ret = cpuTestCompareSignature(data, hostData);
cleanup:
- virObjectUnref(qemuCaps);
virCPUDataFree(hostData);
return ret;
}
diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c
index fb803eaa47..d6f0021665 100644
--- a/tests/domaincapstest.c
+++ b/tests/domaincapstest.c
@@ -79,7 +79,7 @@ fillQemuCaps(virDomainCapsPtr domCaps,
{
int ret = -1;
char *path = NULL;
- virQEMUCapsPtr qemuCaps = NULL;
+ g_autoptr(virQEMUCaps) qemuCaps = NULL;
virDomainCapsLoaderPtr loader = &domCaps->os.loader;
virDomainVirtType virtType;
@@ -131,7 +131,6 @@ fillQemuCaps(virDomainCapsPtr domCaps,
ret = 0;
cleanup:
- virObjectUnref(qemuCaps);
VIR_FREE(path);
return ret;
}
diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
index f9fbfc98f2..ec97e399c8 100644
--- a/tests/qemublocktest.c
+++ b/tests/qemublocktest.c
@@ -1450,7 +1450,8 @@ mymain(void)
cleanup:
qemuTestDriverFree(&driver);
VIR_FREE(capslatest_x86_64);
- virObjectUnref(caps_x86_64);
+ if (caps_x86_64)
+ g_object_unref(caps_x86_64);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
diff --git a/tests/qemucapabilitiestest.c
b/tests/qemucapabilitiestest.c
index 5b32ac1451..b7a93748d9 100644
--- a/tests/qemucapabilitiestest.c
+++ b/tests/qemucapabilitiestest.c
@@ -74,7 +74,7 @@ testQemuCaps(const void *opaque)
char *repliesFile = NULL;
char *capsFile = NULL;
qemuMonitorTestPtr mon = NULL;
- virQEMUCapsPtr capsActual = NULL;
+ g_autoptr(virQEMUCaps) capsActual = NULL;
char *binary = NULL;
char *actual = NULL;
unsigned int fakeMicrocodeVersion = 0;
@@ -138,7 +138,6 @@ testQemuCaps(const void *opaque)
VIR_FREE(actual);
VIR_FREE(binary);
qemuMonitorTestFree(mon);
- virObjectUnref(capsActual);
return ret;
}
@@ -149,8 +148,8 @@ testQemuCapsCopy(const void *opaque)
int ret = -1;
const testQemuData *data = opaque;
char *capsFile = NULL;
- virQEMUCapsPtr orig = NULL;
- virQEMUCapsPtr copy = NULL;
+ g_autoptr(virQEMUCaps) orig = NULL;
+ g_autoptr(virQEMUCaps) copy = NULL;
char *actual = NULL;
capsFile = g_strdup_printf("%s/%s_%s.%s.xml",
@@ -174,8 +173,6 @@ testQemuCapsCopy(const void *opaque)
cleanup:
VIR_FREE(capsFile);
- virObjectUnref(orig);
- virObjectUnref(copy);
VIR_FREE(actual);
return ret;
}
diff --git a/tests/qemucaps2xmltest.c b/tests/qemucaps2xmltest.c
index 349af0e431..6039895fd8 100644
--- a/tests/qemucaps2xmltest.c
+++ b/tests/qemucaps2xmltest.c
@@ -51,7 +51,7 @@ testQemuDataInit(testQemuDataPtr data)
static virQEMUCapsPtr
testQemuGetCaps(char *caps)
{
- virQEMUCapsPtr qemuCaps = NULL;
+ g_autoptr(virQEMUCaps) qemuCaps = NULL;
xmlDocPtr xml;
xmlXPathContextPtr ctxt = NULL;
ssize_t i, n;
@@ -85,11 +85,10 @@ testQemuGetCaps(char *caps)
VIR_FREE(nodes);
xmlFreeDoc(xml);
xmlXPathFreeContext(ctxt);
- return qemuCaps;
+ return g_steal_pointer(&qemuCaps);
error:
VIR_FREE(nodes);
- virObjectUnref(qemuCaps);
xmlFreeDoc(xml);
xmlXPathFreeContext(ctxt);
return NULL;
@@ -98,7 +97,7 @@ testQemuGetCaps(char *caps)
static virCapsPtr
testGetCaps(char *capsData, const testQemuData *data)
{
- virQEMUCapsPtr qemuCaps = NULL;
+ g_autoptr(virQEMUCaps) qemuCaps = NULL;
g_autoptr(virCaps) caps = NULL;
virArch arch = virArchFromString(data->archName);
g_autofree char *binary = NULL;
@@ -107,7 +106,7 @@ testGetCaps(char *capsData, const testQemuData
*data)
if ((qemuCaps = testQemuGetCaps(capsData)) == NULL) {
fprintf(stderr, "failed to parse qemu capabilities flags");
- goto error;
+ return NULL;
}
caps = virCapabilitiesNew(arch, false, false);
@@ -117,15 +116,10 @@ testGetCaps(char *capsData, const testQemuData
*data)
qemuCaps,
arch) < 0) {
fprintf(stderr, "failed to create the capabilities from
qemu");
- goto error;
+ return NULL;
}
- virObjectUnref(qemuCaps);
return g_steal_pointer(&caps);
-
- error:
- virObjectUnref(qemuCaps);
- return NULL;
}
static int
diff --git a/tests/qemucapsprobe.c b/tests/qemucapsprobe.c
index c7e8f3309d..f3705a1ed5 100644
--- a/tests/qemucapsprobe.c
+++ b/tests/qemucapsprobe.c
@@ -45,7 +45,7 @@ int
main(int argc, char **argv)
{
virThread thread;
- virQEMUCapsPtr caps;
+ g_autoptr(virQEMUCaps) caps = NULL;
const char *mock = VIR_TEST_MOCK("qemucapsprobe");
if (!virFileIsExecutable(mock)) {
@@ -78,7 +78,5 @@ main(int argc, char **argv)
-1, -1, 0, NULL)))
return EXIT_FAILURE;
- virObjectUnref(caps);
-
return EXIT_SUCCESS;
}
diff --git a/tests/qemumemlocktest.c b/tests/qemumemlocktest.c
index 3f18fed1c3..c1945f1f2b 100644
--- a/tests/qemumemlocktest.c
+++ b/tests/qemumemlocktest.c
@@ -58,7 +58,7 @@ mymain(void)
{
int ret = 0;
char *fakerootdir;
- virQEMUCapsPtr qemuCaps = NULL;
+ g_autoptr(virQEMUCaps) qemuCaps = NULL;
fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE);
@@ -148,7 +148,6 @@ mymain(void)
DO_TEST("pseries-locked+hostdev",
VIR_DOMAIN_MEMORY_PARAM_UNLIMITED);
cleanup:
- virObjectUnref(qemuCaps);
if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
virFileDeleteTree(fakerootdir);
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index 082467f58e..dd8143ff55 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -286,20 +286,16 @@ virQEMUCapsPtr
qemuTestParseCapabilitiesArch(virArch arch,
const char *capsFile)
{
- virQEMUCapsPtr qemuCaps = NULL;
+ g_autoptr(virQEMUCaps) qemuCaps = NULL;
g_autofree char *binary = g_strdup_printf("/usr/bin/qemu-system-
%s",
virArchToString(arch))
;
if (!(qemuCaps = virQEMUCapsNewBinary(binary)) ||
virQEMUCapsLoadCache(arch, qemuCaps, capsFile) < 0)
- goto error;
+ return NULL;
virQEMUCapsSetInvalidation(qemuCaps, false);
- return qemuCaps;
-
- error:
- virObjectUnref(qemuCaps);
- return NULL;
+ return g_steal_pointer(&qemuCaps);
}
@@ -359,7 +355,7 @@ int qemuTestCapsCacheInsert(virFileCachePtr
cache,
}
if (virFileCacheInsertData(cache, qemu_emulators[i],
tmpCaps) < 0) {
- virObjectUnref(tmpCaps);
+ g_object_unref(tmpCaps);
return -1;
}
}
@@ -663,7 +659,7 @@ testQemuInfoSetArgs(struct testQemuInfo *info,
{
va_list argptr;
testQemuInfoArgName argname;
- virQEMUCapsPtr qemuCaps = NULL;
+ g_autoptr(virQEMUCaps) qemuCaps = NULL;
int gic = GIC_NONE;
char *capsarch = NULL;
char *capsver = NULL;
@@ -780,7 +776,6 @@ testQemuInfoSetArgs(struct testQemuInfo *info,
ret = 0;
cleanup:
- virObjectUnref(qemuCaps);
va_end(argptr);
return ret;
@@ -792,5 +787,6 @@ testQemuInfoClear(struct testQemuInfo *info)
{
VIR_FREE(info->infile);
VIR_FREE(info->outfile);
- virObjectUnref(info->qemuCaps);
+ if (info->qemuCaps)
+ g_object_unref(info->qemuCaps);
}
diff --git a/tests/virfilecachetest.c b/tests/virfilecachetest.c
index 6d280b3bec..2c4f4a94e5 100644
--- a/tests/virfilecachetest.c
+++ b/tests/virfilecachetest.c
@@ -24,52 +24,50 @@
#include "virfile.h"
#include "virfilecache.h"
+#include <glib-object.h>
#define VIR_FROM_THIS VIR_FROM_NONE
struct _testFileCacheObj {
- virObject parent;
+ GObject parent;
char *data;
};
-typedef struct _testFileCacheObj testFileCacheObj;
+#define TYPE_TEST_FILE_CACHE_OBJ test_file_cache_obj_get_type()
+G_DECLARE_FINAL_TYPE(testFileCacheObj, test_file_cache_obj, TEST,
FILE_CACHE_OBJ, GObject);
typedef testFileCacheObj *testFileCacheObjPtr;
-static virClassPtr testFileCacheObjClass;
+G_DEFINE_TYPE(testFileCacheObj, test_file_cache_obj, G_TYPE_OBJECT);
static void
-testFileCacheObjDispose(void *opaque)
+testFileCacheObjFinalize(GObject *opaque)
{
- testFileCacheObjPtr obj = opaque;
+ testFileCacheObjPtr obj = TEST_FILE_CACHE_OBJ(opaque);
VIR_FREE(obj->data);
-}
+ G_OBJECT_CLASS(test_file_cache_obj_parent_class)-
>finalize(opaque);
+}
-static int
-testFileCacheObjOnceInit(void)
+static void
+test_file_cache_obj_init(testFileCacheObj *obj G_GNUC_UNUSED)
{
- if (!VIR_CLASS_NEW(testFileCacheObj, virClassForObject()))
- return -1;
-
- return 0;
}
+static void
+test_file_cache_obj_class_init(testFileCacheObjClass *klass)
+{
+ GObjectClass *obj = G_OBJECT_CLASS(klass);
-VIR_ONCE_GLOBAL_INIT(testFileCacheObj);
+ obj->finalize = testFileCacheObjFinalize;
+}
static testFileCacheObjPtr
testFileCacheObjNew(const char *data)
{
- testFileCacheObjPtr obj;
-
- if (testFileCacheObjInitialize() < 0)
- return NULL;
-
- if (!(obj = virObjectNew(testFileCacheObjClass)))
- return NULL;
+ testFileCacheObjPtr obj =
TEST_FILE_CACHE_OBJ(g_object_new(TYPE_TEST_FILE_CACHE_OBJ, NULL));
obj->data = g_strdup(data);
@@ -160,9 +158,8 @@ typedef testFileCacheData *testFileCacheDataPtr;
static int
testFileCache(const void *opaque)
{
- int ret = -1;
const testFileCacheData *data = opaque;
- testFileCacheObjPtr obj = NULL;
+ g_autoptr(testFileCacheObj) obj = NULL;
testFileCachePrivPtr testPriv = virFileCacheGetPriv(data-
>cache);
testPriv->dataSaved = false;
@@ -171,27 +168,23 @@ testFileCache(const void *opaque)
if (!(obj = virFileCacheLookup(data->cache, data->name))) {
fprintf(stderr, "Getting cached data failed.\n");
- goto cleanup;
+ return -1;
}
if (!obj->data || STRNEQ(data->expectData, obj->data)) {
fprintf(stderr, "Expect data '%s', loaded data
'%s'.\n",
data->expectData, NULLSTR(obj->data));
- goto cleanup;
+ return -1;
}
if (data->expectSave != testPriv->dataSaved) {
fprintf(stderr, "Expect data to be saved '%s', data saved
'%s'.\n",
data->expectSave ? "yes" : "no",
testPriv->dataSaved ? "yes" : "no");
- goto cleanup;
+ return -1;
}
- ret = 0;
-
- cleanup:
- virObjectUnref(obj);
- return ret;
+ return 0;
}