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@xxxxxxxxx> > --- > 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; > } > >