[PATCH 03/36] qemu: convert virQEMUCaps to GObject
Jonathon Jongsma
jjongsma at redhat.com
Tue Apr 7 21:47:25 UTC 2020
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 at 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;
> }
>
>
More information about the libvir-list
mailing list