From nobody Mon Feb 9 12:09:05 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) client-ip=207.211.31.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1589371109; cv=none; d=zohomail.com; s=zohoarc; b=noaSckPFIE2DDEHDiBsc34Nvj1E26rP+XPg9AMy8Tx0WhJk2CD+dzmh1K3vjB7K496pXCpoyvmZu6WsP1X0ErecMCiY/pCJvR2+TqC5KZPt0E2TxsE+AC5rk38pCD83xRLIzlzF98SHdr0/JY5COxxckMSqr9iop4qFzDdsiLNk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1589371109; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=65pnTOLXv6izvd15oRD68LMXhQKC5ksqrcxjngirhpM=; b=BHckpdHsHDZzmJVxMEud/8moaaIfQHuzE01AQAJQ3WiNGq4Lrv1MxbiSRvoUBUf96h47W1zyRVmqYgJI7UuTdZtlHyo6QY8wlFJNLb7a/P1IIto7bkM1LPABwX4rhUrE9/LntaPHLLuupyLFLMz1DyMPSjHKovtF3o34ypbA4g8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by mx.zohomail.com with SMTPS id 1589371109008947.6956120358561; Wed, 13 May 2020 04:58:29 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-173-UTHcvQEYOFS1WsKRgJcCmQ-1; Wed, 13 May 2020 07:58:23 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id BEE97835B52; Wed, 13 May 2020 11:58:17 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9DA595D9E5; Wed, 13 May 2020 11:58:17 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 6AAAF1809557; Wed, 13 May 2020 11:58:17 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 04DBwDZA015951 for ; Wed, 13 May 2020 07:58:13 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2658A110EB4; Wed, 13 May 2020 11:58:13 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast06.extmail.prod.ext.rdu2.redhat.com [10.11.55.22]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 20A09114D07 for ; Wed, 13 May 2020 11:58:10 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1A8331859163 for ; Wed, 13 May 2020 11:58:10 +0000 (UTC) Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-503-_A4xs1ZvPgy5QLpbeHIjSg-1; Wed, 13 May 2020 07:58:07 -0400 Received: by mail-wr1-f52.google.com with SMTP id e1so6605306wrt.5 for ; Wed, 13 May 2020 04:58:06 -0700 (PDT) Received: from localhost.localdomain (public-gprs367127.centertel.pl. [37.47.65.88]) by smtp.gmail.com with ESMTPSA id l1sm27838422wrc.24.2020.05.13.04.58.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2020 04:58:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589371107; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=65pnTOLXv6izvd15oRD68LMXhQKC5ksqrcxjngirhpM=; b=VwNS2prTfWJArn4RskN1fkZeh90Vm/M7A08HpIiOy+wT2lG8tkE5K+CjOO3LhrPVbEwQSd TQ+XVBqqQWBYifRadqbXfByetuocuJ3FRIruqaPbJ74bItEoU6pRan92rxcuSohkz+lC3Y Tmz1MOauXoonLZkZVQ1P8SKuUi7XKg8= X-MC-Unique: UTHcvQEYOFS1WsKRgJcCmQ-1 X-MC-Unique: _A4xs1ZvPgy5QLpbeHIjSg-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=65pnTOLXv6izvd15oRD68LMXhQKC5ksqrcxjngirhpM=; b=GtiU9R+yHUoubIgeibaYbHe/7A5uoGyxHjS9Gm6dsNY7v32hUuqafBOkNGapvsMBuQ MogaiYkyuHFst4XzXl9l5JqIrkE8iybpS3SgCdCTIS/By/sMPrgEkEufaDV2Dt9apVCY lV1owOzWbVaDf47f+Au3WoCduPigNJSJLA4xp+rc9SMoUUfPVK/UNW9Sq+gAPVTwvw5s fUhYa9XwXaPOgh/38+yyhY5VYelEOQ2D4iymrw8TIrimMC8a5gt0/IKz4k3v4QmouKoB oSIGMcGWLg8oleTrzhGvp+wWfQqQz1xOwPFA0wOf1fi2hWr74p+fiafXv9v8JlYJNzwZ rMdg== X-Gm-Message-State: AGi0PuaY80S2JLFHkTqODt57zhO+f0wwmnJVE3C/JZROPTZ2m3n2zZ/+ 1PfbWhUaaHmupZeSeGGbdZT3pB4A X-Google-Smtp-Source: APiQypKZ98nDnBJWOEQBhvHmPzEqWZp+oHnoedZonKrn+f/CKQ2HNuxIolJZ277kAGDkOi326kupDw== X-Received: by 2002:a05:6000:8:: with SMTP id h8mr32266354wrx.372.1589371084989; Wed, 13 May 2020 04:58:04 -0700 (PDT) From: Rafael Fonseca To: libvirt-list@redhat.com Subject: [PATCH 03/40] qemu: convert virQEMUCaps to GObject Date: Wed, 13 May 2020 13:56:47 +0200 Message-Id: <20200513115724.157687-4-r4f4rfs@gmail.com> In-Reply-To: <20200513115724.157687-1-r4f4rfs@gmail.com> References: <20200513115724.157687-1-r4f4rfs@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Cc: Rafael Fonseca X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Rafael Fonseca --- src/qemu/qemu_capabilities.c | 151 ++++++++++++++++------------------- src/qemu/qemu_capabilities.h | 9 ++- src/qemu/qemu_domain.c | 15 ++-- src/qemu/qemu_process.c | 2 +- src/util/virfilecache.c | 43 ++++------ src/util/virfilecache.h | 12 +-- tests/cputest.c | 13 +-- 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 | 17 ++-- tests/virfilecachetest.c | 69 +++++++--------- 15 files changed, 161 insertions(+), 208 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index afbbdf8493..a38d0ed7e9 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -653,7 +653,7 @@ static void virQEMUDomainCapsCacheDispose(void *obj) * And don't forget to update virQEMUCapsNewCopy. */ struct _virQEMUCaps { - virObject parent; + GObject parent; =20 bool kvmSupportsNesting; =20 @@ -691,14 +691,23 @@ struct virQEMUCapsSearchData { }; =20 =20 -static virClassPtr virQEMUCapsClass; -static void virQEMUCapsDispose(void *obj); +G_DEFINE_TYPE(virQEMUCaps, vir_qemu_caps, G_TYPE_OBJECT); =20 -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 =3D G_OBJECT_CLASS(klass); + + obj->finalize =3D virQEMUCapsFinalize; +} =20 +static int virQEMUCapsOnceInit(void) +{ if (!(VIR_CLASS_NEW(virQEMUDomainCapsCache, virClassForObjectLockable(= )))) return -1; =20 @@ -878,7 +887,7 @@ virQEMUCapsInitGuest(virCapsPtr caps, virArch guestarch) { char *binary =3D NULL; - virQEMUCapsPtr qemuCaps =3D NULL; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; int ret =3D -1; =20 binary =3D virQEMUCapsGetDefaultEmulator(hostarch, guestarch); @@ -896,7 +905,6 @@ virQEMUCapsInitGuest(virCapsPtr caps, guestarch); =20 VIR_FREE(binary); - virObjectUnref(qemuCaps); =20 return ret; } @@ -1699,7 +1707,7 @@ int virQEMUCapsGetDefaultVersion(virCapsPtr caps, virFileCachePtr capsCache, unsigned int *version) { - virQEMUCapsPtr qemucaps; + g_autoptr(virQEMUCaps) qemucaps =3D NULL; virArch hostarch; virCapsDomainDataPtr capsdata; =20 @@ -1722,7 +1730,6 @@ int virQEMUCapsGetDefaultVersion(virCapsPtr caps, return -1; =20 *version =3D virQEMUCapsGetVersion(qemucaps); - virObjectUnref(qemucaps); return 0; } =20 @@ -1748,26 +1755,17 @@ virQEMUDomainCapsCacheNew(void) virQEMUCapsPtr virQEMUCapsNew(void) { - virQEMUCapsPtr qemuCaps; - - if (virQEMUCapsInitialize() < 0) - return NULL; - - if (!(qemuCaps =3D virObjectNew(virQEMUCapsClass))) - return NULL; + g_autoptr(virQEMUCaps) qemuCaps =3D + VIR_QEMU_CAPS(g_object_new(VIR_TYPE_QEMU_CAPS, NULL)); =20 qemuCaps->invalidation =3D true; if (!(qemuCaps->flags =3D virBitmapNew(QEMU_CAPS_LAST))) - goto error; + return NULL; =20 if (!(qemuCaps->domCapsCache =3D virQEMUDomainCapsCacheNew())) - goto error; - - return qemuCaps; + return NULL; =20 - error: - virObjectUnref(qemuCaps); - return NULL; + return g_steal_pointer(&qemuCaps); } =20 =20 @@ -1884,7 +1882,7 @@ virQEMUCapsAccelCopy(virQEMUCapsAccelPtr dst, =20 virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) { - virQEMUCapsPtr ret =3D virQEMUCapsNewBinary(qemuCaps->binary); + g_autoptr(virQEMUCaps) ret =3D virQEMUCapsNewBinary(qemuCaps->binary); size_t i; =20 if (!ret) @@ -1908,10 +1906,10 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qe= muCaps) =20 if (virQEMUCapsAccelCopy(&ret->kvm, &qemuCaps->kvm) < 0 || virQEMUCapsAccelCopy(&ret->tcg, &qemuCaps->tcg) < 0) - goto error; + return NULL; =20 if (VIR_ALLOC_N(ret->gicCapabilities, qemuCaps->ngicCapabilities) < 0) - goto error; + return NULL; ret->ngicCapabilities =3D qemuCaps->ngicCapabilities; for (i =3D 0; i < qemuCaps->ngicCapabilities; i++) ret->gicCapabilities[i] =3D qemuCaps->gicCapabilities[i]; @@ -1919,13 +1917,9 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qem= uCaps) if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SEV_GUEST) && virQEMUCapsSEVInfoCopy(&ret->sevCapabilities, qemuCaps->sevCapabilities) < 0) - goto error; - - return ret; + return NULL; =20 - error: - virObjectUnref(ret); - return NULL; + return g_steal_pointer(&ret); } =20 =20 @@ -1946,9 +1940,9 @@ virQEMUCapsAccelClear(virQEMUCapsAccelPtr caps) } =20 =20 -void virQEMUCapsDispose(void *obj) +static void virQEMUCapsFinalize(GObject *obj) { - virQEMUCapsPtr qemuCaps =3D obj; + virQEMUCapsPtr qemuCaps =3D VIR_QEMU_CAPS(obj); =20 virObjectUnref(qemuCaps->domCapsCache); virBitmapFree(qemuCaps->flags); @@ -1963,6 +1957,8 @@ void virQEMUCapsDispose(void *obj) =20 virQEMUCapsAccelClear(&qemuCaps->kvm); virQEMUCapsAccelClear(&qemuCaps->tcg); + + G_OBJECT_CLASS(vir_qemu_caps_parent_class)->finalize(obj); } =20 void @@ -4594,14 +4590,17 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps) =20 =20 static int -virQEMUCapsSaveFile(void *data, +virQEMUCapsSaveFile(GObject *data, const char *filename, void *privData G_GNUC_UNUSED) { - virQEMUCapsPtr qemuCaps =3D data; + virQEMUCapsPtr qemuCaps =3D VIR_QEMU_CAPS(data); char *xml =3D NULL; int ret =3D -1; =20 + if (!qemuCaps) + return -1; + xml =3D virQEMUCapsFormatCache(qemuCaps); =20 if (virFileWriteStr(filename, xml, 0600) < 0) { @@ -4707,15 +4706,18 @@ virQEMUCapsKVMUsable(virQEMUCapsCachePrivPtr priv) =20 =20 static bool -virQEMUCapsIsValid(void *data, +virQEMUCapsIsValid(GObject *data, void *privData) { - virQEMUCapsPtr qemuCaps =3D data; + virQEMUCapsPtr qemuCaps =3D VIR_QEMU_CAPS(data); virQEMUCapsCachePrivPtr priv =3D privData; bool kvmUsable; struct stat sb; bool kvmSupportsNesting; =20 + if (!qemuCaps) + return false; + if (!qemuCaps->invalidation) return true; =20 @@ -5251,18 +5253,18 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch, unsigned int microcodeVersion, const char *kernelVersion) { - virQEMUCapsPtr qemuCaps; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; struct stat sb; =20 if (!(qemuCaps =3D virQEMUCapsNewBinary(binary))) - goto error; + return NULL; =20 /* 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 =3D sb.st_ctime; =20 @@ -5273,11 +5275,11 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch, if (!virFileIsExecutable(binary)) { virReportSystemError(errno, _("QEMU binary %s is not executable"), binary); - goto error; + return NULL; } =20 if (virQEMUCapsInitQMP(qemuCaps, libDir, runUid, runGid) < 0) - goto error; + return NULL; =20 qemuCaps->libvirtCtime =3D virGetSelfLastChanged(); qemuCaps->libvirtVersion =3D LIBVIR_VERSION_NUMBER; @@ -5293,48 +5295,42 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch, qemuCaps->kvmSupportsNesting =3D virQEMUCapsKVMSupportsNesting(); } =20 - return qemuCaps; - - error: - virObjectUnref(qemuCaps); - return NULL; + return g_steal_pointer(&qemuCaps); } =20 -static void * +static GObject * virQEMUCapsNewData(const char *binary, void *privData) { virQEMUCapsCachePrivPtr priv =3D privData; =20 - return virQEMUCapsNewForBinaryInternal(priv->hostArch, - binary, - priv->libDir, - priv->runUid, - priv->runGid, - virHostCPUGetMicrocodeVersion(), - priv->kernelVersion); + return G_OBJECT( + virQEMUCapsNewForBinaryInternal(priv->hostArch, + binary, + priv->libDir, + priv->runUid, + priv->runGid, + virHostCPUGetMicrocodeVersion(= ), + priv->kernelVersion) + ); } =20 =20 -static void * +static GObject * virQEMUCapsLoadFile(const char *filename, const char *binary, void *privData) { - virQEMUCapsPtr qemuCaps =3D virQEMUCapsNewBinary(binary); + g_autoptr(virQEMUCaps) qemuCaps =3D virQEMUCapsNewBinary(binary); virQEMUCapsCachePrivPtr priv =3D privData; =20 if (!qemuCaps) return NULL; =20 if (virQEMUCapsLoadCache(priv->hostArch, qemuCaps, filename) < 0) - goto error; - - return qemuCaps; + return NULL; =20 - error: - virObjectUnref(qemuCaps); - return NULL; + return g_steal_pointer(&qemuCaps); } =20 =20 @@ -5450,15 +5446,13 @@ virQEMUCapsCacheLookupCopy(virFileCachePtr cache, const char *binary, const char *machineType) { - virQEMUCapsPtr qemuCaps =3D virQEMUCapsCacheLookup(cache, binary); + g_autoptr(virQEMUCaps) qemuCaps =3D virQEMUCapsCacheLookup(cache, bina= ry); virQEMUCapsPtr ret; =20 if (!qemuCaps) return NULL; =20 ret =3D virQEMUCapsNewCopy(qemuCaps); - virObjectUnref(qemuCaps); - if (!ret) return NULL; =20 @@ -5562,8 +5556,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache, virArch hostarch =3D virArchFromHost(); virArch arch =3D hostarch; virDomainVirtType capsType; - virQEMUCapsPtr qemuCaps =3D NULL; - virQEMUCapsPtr ret =3D NULL; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; virArch arch_from_caps; g_autofree char *probedbinary =3D NULL; =20 @@ -5571,14 +5564,14 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache, (virttype =3D virDomainVirtTypeFromString(virttypeStr)) < 0) { virReportError(VIR_ERR_INVALID_ARG, _("unknown virttype: %s"), virttypeStr); - goto cleanup; + return NULL; } =20 if (archStr && (arch =3D virArchFromString(archStr)) =3D=3D VIR_ARCH_NONE) { virReportError(VIR_ERR_INVALID_ARG, _("unknown architecture: %s"), archStr); - goto cleanup; + return NULL; } =20 if (!binary) { @@ -5587,7 +5580,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache, } =20 if (!(qemuCaps =3D virQEMUCapsCacheLookup(cache, binary))) - goto cleanup; + return NULL; =20 arch_from_caps =3D virQEMUCapsGetArch(qemuCaps); =20 @@ -5601,7 +5594,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache, "match given architecture '%s'"), virArchToString(arch_from_caps), virArchToString(arch)); - goto cleanup; + return NULL; } =20 capsType =3D virQEMUCapsGetVirtType(qemuCaps); @@ -5613,7 +5606,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache, virReportError(VIR_ERR_INVALID_ARG, _("KVM is not supported by '%s' on this host"), binary); - goto cleanup; + return NULL; } =20 if (machine) { @@ -5624,7 +5617,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache, virReportError(VIR_ERR_INVALID_ARG, _("the machine '%s' is not supported by emulato= r '%s'"), machine, binary); - goto cleanup; + return NULL; } } else { machine =3D virQEMUCapsGetPreferredMachine(qemuCaps, virttype); @@ -5637,11 +5630,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache, if (retMachine) *retMachine =3D machine; =20 - ret =3D g_steal_pointer(&qemuCaps); - - cleanup: - virObjectUnref(qemuCaps); - return ret; + return g_steal_pointer(&qemuCaps); } =20 bool diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 6bfc7386e3..c3f67fe2c6 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -21,7 +21,9 @@ =20 #pragma once =20 -#include "virobject.h" +#include "internal.h" +#include + #include "capabilities.h" #include "vircommand.h" #include "qemu_monitor.h" @@ -567,10 +569,11 @@ typedef enum { /* virQEMUCapsFlags grouping marker fo= r syntax-check */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; =20 -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; =20 -G_DEFINE_AUTOPTR_CLEANUP_FUNC(virQEMUCaps, virObjectUnref); =20 virQEMUCapsPtr virQEMUCapsNew(void); virQEMUCapsPtr virQEMUCapsNewBinary(const char *binary); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index a1b250fd0b..252f2a045e 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2274,8 +2274,7 @@ qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr= priv) =20 VIR_FREE(priv->machineName); =20 - virObjectUnref(priv->qemuCaps); - priv->qemuCaps =3D NULL; + g_clear_object(&priv->qemuCaps); =20 VIR_FREE(priv->pidfile); =20 @@ -4981,7 +4980,7 @@ qemuDomainDefPostParse(virDomainDefPtr def, { virQEMUDriverPtr driver =3D opaque; g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); - virQEMUCapsPtr qemuCaps =3D parseOpaque; + virQEMUCapsPtr qemuCaps =3D VIR_QEMU_CAPS(parseOpaque); =20 /* Note that qemuCaps may be NULL when this function is called. This * function shall not fail in that case. It will be re-run on VM start= up @@ -5936,7 +5935,7 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr de= v, /* Note that qemuCaps may be NULL when this function is called. This * function shall not fail in that case. It will be re-run on VM start= up * with the capabilities populated. */ - virQEMUCapsPtr qemuCaps =3D parseOpaque; + virQEMUCapsPtr qemuCaps =3D VIR_QEMU_CAPS(parseOpaque); int ret =3D -1; =20 switch ((virDomainDeviceType) dev->type) { @@ -6024,7 +6023,7 @@ qemuDomainDefAssignAddresses(virDomainDef *def, /* Note that qemuCaps may be NULL when this function is called. This * function shall not fail in that case. It will be re-run on VM start= up * with the capabilities populated. */ - virQEMUCapsPtr qemuCaps =3D parseOpaque; + virQEMUCapsPtr qemuCaps =3D VIR_QEMU_CAPS(parseOpaque); bool newDomain =3D parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE; =20 /* Skip address assignment if @qemuCaps is not present. In such case d= evices @@ -6057,9 +6056,9 @@ qemuDomainPostParseDataAlloc(const virDomainDef *def, static void qemuDomainPostParseDataFree(void *parseOpaque) { - virQEMUCapsPtr qemuCaps =3D parseOpaque; + virQEMUCapsPtr qemuCaps =3D VIR_QEMU_CAPS(parseOpaque); =20 - virObjectUnref(qemuCaps); + g_clear_object(&qemuCaps); } =20 =20 @@ -6898,7 +6897,7 @@ qemuDomainDefFormatBufInternal(virQEMUDriverPtr drive= r, g_autoptr(virQEMUCaps) qCaps =3D NULL; =20 if (qemuCaps) { - qCaps =3D virObjectRef(qemuCaps); + qCaps =3D g_object_ref(qemuCaps); } else { if (!(qCaps =3D virQEMUCapsCacheLookupCopy(driver->qemuCapsCac= he, def->virtType, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index dee3f3fb63..57700438e9 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5489,7 +5489,7 @@ qemuProcessPrepareQEMUCaps(virDomainObjPtr vm, { qemuDomainObjPrivatePtr priv =3D vm->privateData; =20 - virObjectUnref(priv->qemuCaps); + g_clear_object(&priv->qemuCaps); if (!(priv->qemuCaps =3D virQEMUCapsCacheLookupCopy(qemuCapsCache, vm->def->virtType, vm->def->emulator, diff --git a/src/util/virfilecache.c b/src/util/virfilecache.c index aecabf173d..cafb700476 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 =20 #include #include @@ -125,59 +126,51 @@ virFileCacheGetFileName(virFileCachePtr cache, static int virFileCacheLoad(virFileCachePtr cache, const char *name, - void **data) + GObject **data) { g_autofree char *file =3D NULL; - int ret =3D -1; - void *loadData =3D NULL; + g_autoptr(GObject) loadData =3D NULL; =20 *data =3D NULL; =20 if (!(file =3D virFileCacheGetFileName(cache, name))) - return ret; + return -1; =20 if (!virFileExists(file)) { if (errno =3D=3D ENOENT) { VIR_DEBUG("No cached data '%s' for '%s'", file, name); - ret =3D 0; - goto cleanup; + return 0; } virReportSystemError(errno, _("Unable to access cache '%s' for '%s'"), file, name); - goto cleanup; + return -1; } =20 if (!(loadData =3D cache->handlers.loadFile(file, name, cache->priv)))= { VIR_WARN("Failed to load cached data from '%s' for '%s': %s", file, name, virGetLastErrorMessage()); virResetLastError(); - ret =3D 0; - goto cleanup; + return 0; } =20 if (!cache->handlers.isValid(loadData, cache->priv)) { VIR_DEBUG("Outdated cached capabilities '%s' for '%s'", file, name= ); unlink(file); - ret =3D 0; - goto cleanup; + return 0; } =20 VIR_DEBUG("Loaded cached data '%s' for '%s'", file, name); =20 - ret =3D 1; - *data =3D g_steal_pointer(&loadData); - - cleanup: - virObjectUnref(loadData); - return ret; + g_set_object(data, loadData); + return 1; } =20 =20 static int virFileCacheSave(virFileCachePtr cache, const char *name, - void *data) + GObject *data) { g_autofree char *file =3D NULL; =20 @@ -195,7 +188,7 @@ static void * virFileCacheNewData(virFileCachePtr cache, const char *name) { - void *data =3D NULL; + g_autoptr(GObject) data =3D NULL; int rv; =20 if ((rv =3D virFileCacheLoad(cache, name, &data)) < 0) @@ -206,12 +199,11 @@ virFileCacheNewData(virFileCachePtr cache, return NULL; =20 if (virFileCacheSave(cache, name, data) < 0) { - virObjectUnref(data); - data =3D NULL; + return NULL; } } =20 - return data; + return g_steal_pointer(&data); } =20 =20 @@ -275,8 +267,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 =3D NULL; + g_clear_object(data); } } } @@ -306,7 +297,7 @@ virFileCacheLookup(virFileCachePtr cache, data =3D virHashLookup(cache->table, name); virFileCacheValidate(cache, name, &data); =20 - virObjectRef(data); + g_object_ref(data); virObjectUnlock(cache); =20 return data; @@ -337,7 +328,7 @@ virFileCacheLookupByFunc(virFileCachePtr cache, data =3D virHashSearch(cache->table, iter, iterData, (void **)&name); virFileCacheValidate(cache, name, &data); =20 - virObjectRef(data); + g_object_ref(data); virObjectUnlock(cache); =20 return data; diff --git a/src/util/virfilecache.h b/src/util/virfilecache.h index 006a9717cb..c8277872d3 100644 --- a/src/util/virfilecache.h +++ b/src/util/virfilecache.h @@ -23,8 +23,8 @@ =20 #include "internal.h" =20 -#include "virobject.h" #include "virhash.h" +#include =20 typedef struct _virFileCache virFileCache; typedef virFileCache *virFileCachePtr; @@ -40,7 +40,7 @@ typedef virFileCache *virFileCachePtr; * Returns *true* if it's valid or *false* if not valid. */ typedef bool -(*virFileCacheIsValidPtr)(void *data, +(*virFileCacheIsValidPtr)(GObject *data, void *priv); =20 /** @@ -49,11 +49,11 @@ typedef bool * @priv: private data created together with cache * * Creates a new data based on the @name. The returned data must be - * an instance of virObject. + * an instance of GObject. * * Returns data object or NULL on error. */ -typedef void * +typedef GObject * (*virFileCacheNewDataPtr)(const char *name, void *priv); =20 @@ -67,7 +67,7 @@ typedef void * * * Returns cached data object or NULL on error. */ -typedef void * +typedef GObject * (*virFileCacheLoadFilePtr)(const char *filename, const char *name, void *priv); @@ -83,7 +83,7 @@ typedef void * * Returns 0 on success, -1 on error. */ typedef int -(*virFileCacheSaveFilePtr)(void *data, +(*virFileCacheSaveFilePtr)(GObject *data, const char *filename, void *priv); =20 diff --git a/tests/cputest.c b/tests/cputest.c index 21f47a6853..54c9689663 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -521,8 +521,7 @@ cpuTestMakeQEMUCaps(const struct data *data) return qemuCaps; =20 error: - virObjectUnref(qemuCaps); - qemuCaps =3D NULL; + g_clear_object(&qemuCaps); goto cleanup; } =20 @@ -531,7 +530,7 @@ static int cpuTestGetCPUModels(const struct data *data, virDomainCapsCPUModelsPtr *models) { - virQEMUCapsPtr qemuCaps; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; =20 *models =3D NULL; =20 @@ -544,8 +543,6 @@ cpuTestGetCPUModels(const struct data *data, =20 *models =3D virQEMUCapsGetCPUModels(qemuCaps, VIR_DOMAIN_VIRT_KVM, NUL= L, NULL); =20 - virObjectUnref(qemuCaps); - return 0; } =20 @@ -878,7 +875,7 @@ static int cpuTestJSONCPUID(const void *arg) { const struct data *data =3D arg; - virQEMUCapsPtr qemuCaps =3D NULL; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; virCPUDefPtr cpu =3D NULL; char *result =3D NULL; int ret =3D -1; @@ -900,7 +897,6 @@ cpuTestJSONCPUID(const void *arg) ret =3D cpuTestCompareXML(data->arch, cpu, result); =20 cleanup: - virObjectUnref(qemuCaps); virCPUDefFree(cpu); VIR_FREE(result); return ret; @@ -911,7 +907,7 @@ static int cpuTestJSONSignature(const void *arg) { const struct data *data =3D arg; - virQEMUCapsPtr qemuCaps =3D NULL; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; virCPUDataPtr hostData =3D NULL; qemuMonitorCPUModelInfoPtr modelInfo; int ret =3D -1; @@ -926,7 +922,6 @@ cpuTestJSONSignature(const void *arg) ret =3D cpuTestCompareSignature(data, hostData); =20 cleanup: - virObjectUnref(qemuCaps); virCPUDataFree(hostData); return ret; } diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index c3a9f4ef91..2393e312d1 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -79,7 +79,7 @@ fillQemuCaps(virDomainCapsPtr domCaps, { int ret =3D -1; char *path =3D NULL; - virQEMUCapsPtr qemuCaps =3D NULL; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; virDomainCapsLoaderPtr loader =3D &domCaps->os.loader; virDomainVirtType virtType; =20 @@ -131,7 +131,6 @@ fillQemuCaps(virDomainCapsPtr domCaps, =20 ret =3D 0; cleanup: - virObjectUnref(qemuCaps); VIR_FREE(path); return ret; } diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c index 8a715d1989..762cd0e6b6 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); =20 return ret =3D=3D 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 =3D NULL; char *capsFile =3D NULL; qemuMonitorTestPtr mon =3D NULL; - virQEMUCapsPtr capsActual =3D NULL; + g_autoptr(virQEMUCaps) capsActual =3D NULL; char *binary =3D NULL; char *actual =3D NULL; unsigned int fakeMicrocodeVersion =3D 0; @@ -138,7 +138,6 @@ testQemuCaps(const void *opaque) VIR_FREE(actual); VIR_FREE(binary); qemuMonitorTestFree(mon); - virObjectUnref(capsActual); return ret; } =20 @@ -149,8 +148,8 @@ testQemuCapsCopy(const void *opaque) int ret =3D -1; const testQemuData *data =3D opaque; char *capsFile =3D NULL; - virQEMUCapsPtr orig =3D NULL; - virQEMUCapsPtr copy =3D NULL; + g_autoptr(virQEMUCaps) orig =3D NULL; + g_autoptr(virQEMUCaps) copy =3D NULL; char *actual =3D NULL; =20 capsFile =3D g_strdup_printf("%s/%s_%s.%s.xml", @@ -174,8 +173,6 @@ testQemuCapsCopy(const void *opaque) =20 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 =3D NULL; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; xmlDocPtr xml; xmlXPathContextPtr ctxt =3D 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); =20 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 =3D NULL; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; g_autoptr(virCaps) caps =3D NULL; virArch arch =3D virArchFromString(data->archName); g_autofree char *binary =3D NULL; @@ -107,7 +106,7 @@ testGetCaps(char *capsData, const testQemuData *data) =20 if ((qemuCaps =3D testQemuGetCaps(capsData)) =3D=3D NULL) { fprintf(stderr, "failed to parse qemu capabilities flags"); - goto error; + return NULL; } =20 caps =3D 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; } =20 - virObjectUnref(qemuCaps); return g_steal_pointer(&caps); - - error: - virObjectUnref(qemuCaps); - return NULL; } =20 static int diff --git a/tests/qemucapsprobe.c b/tests/qemucapsprobe.c index ea88fd2e8a..9167500614 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 =3D NULL; const char *mock =3D VIR_TEST_MOCK("qemucapsprobe"); =20 if (!virFileIsExecutable(mock)) { @@ -80,7 +80,5 @@ main(int argc, char **argv) -1, -1, 0, NULL))) return EXIT_FAILURE; =20 - 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 =3D 0; char *fakerootdir; - virQEMUCapsPtr qemuCaps =3D NULL; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; =20 fakerootdir =3D g_strdup(FAKEROOTDIRTEMPLATE); =20 @@ -148,7 +148,6 @@ mymain(void) DO_TEST("pseries-locked+hostdev", VIR_DOMAIN_MEMORY_PARAM_UNLIMITED); =20 cleanup: - virObjectUnref(qemuCaps); =20 if (getenv("LIBVIRT_SKIP_CLEANUP") =3D=3D NULL) virFileDeleteTree(fakerootdir); diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 06932d1172..ea0a89e902 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -286,20 +286,16 @@ virQEMUCapsPtr qemuTestParseCapabilitiesArch(virArch arch, const char *capsFile) { - virQEMUCapsPtr qemuCaps =3D NULL; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; g_autofree char *binary =3D g_strdup_printf("/usr/bin/qemu-system-%s", virArchToString(arch)); =20 if (!(qemuCaps =3D virQEMUCapsNewBinary(binary)) || virQEMUCapsLoadCache(arch, qemuCaps, capsFile) < 0) - goto error; + return NULL; =20 virQEMUCapsSetInvalidation(qemuCaps, false); - return qemuCaps; - - error: - virObjectUnref(qemuCaps); - return NULL; + return g_steal_pointer(&qemuCaps); } =20 =20 @@ -359,7 +355,7 @@ int qemuTestCapsCacheInsert(virFileCachePtr cache, } =20 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 =3D NULL; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; int gic =3D GIC_NONE; char *capsarch =3D NULL; char *capsver =3D NULL; @@ -780,7 +776,6 @@ testQemuInfoSetArgs(struct testQemuInfo *info, ret =3D 0; =20 cleanup: - virObjectUnref(qemuCaps); va_end(argptr); =20 return ret; @@ -792,5 +787,5 @@ testQemuInfoClear(struct testQemuInfo *info) { VIR_FREE(info->infile); VIR_FREE(info->outfile); - virObjectUnref(info->qemuCaps); + g_clear_object(&info->qemuCaps); } diff --git a/tests/virfilecachetest.c b/tests/virfilecachetest.c index 6d280b3bec..66e83f49b6 100644 --- a/tests/virfilecachetest.c +++ b/tests/virfilecachetest.c @@ -24,52 +24,50 @@ #include "virfile.h" #include "virfilecache.h" =20 +#include =20 #define VIR_FROM_THIS VIR_FROM_NONE =20 =20 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_CAC= HE_OBJ, GObject); typedef testFileCacheObj *testFileCacheObjPtr; =20 =20 -static virClassPtr testFileCacheObjClass; +G_DEFINE_TYPE(testFileCacheObj, test_file_cache_obj, G_TYPE_OBJECT); =20 =20 static void -testFileCacheObjDispose(void *opaque) +testFileCacheObjFinalize(GObject *opaque) { - testFileCacheObjPtr obj =3D opaque; + testFileCacheObjPtr obj =3D TEST_FILE_CACHE_OBJ(opaque); VIR_FREE(obj->data); -} =20 + G_OBJECT_CLASS(test_file_cache_obj_parent_class)->finalize(opaque); +} =20 -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; } =20 +static void +test_file_cache_obj_class_init(testFileCacheObjClass *klass) +{ + GObjectClass *obj =3D G_OBJECT_CLASS(klass); =20 -VIR_ONCE_GLOBAL_INIT(testFileCacheObj); + obj->finalize =3D testFileCacheObjFinalize; +} =20 =20 static testFileCacheObjPtr testFileCacheObjNew(const char *data) { - testFileCacheObjPtr obj; - - if (testFileCacheObjInitialize() < 0) - return NULL; - - if (!(obj =3D virObjectNew(testFileCacheObjClass))) - return NULL; + testFileCacheObjPtr obj =3D TEST_FILE_CACHE_OBJ(g_object_new(TYPE_TEST= _FILE_CACHE_OBJ, NULL)); =20 obj->data =3D g_strdup(data); =20 @@ -87,27 +85,27 @@ typedef testFileCachePriv *testFileCachePrivPtr; =20 =20 static bool -testFileCacheIsValid(void *data, +testFileCacheIsValid(GObject *data, void *priv) { testFileCachePrivPtr testPriv =3D priv; - testFileCacheObjPtr obj =3D data; + testFileCacheObjPtr obj =3D TEST_FILE_CACHE_OBJ(data); =20 - return STREQ(testPriv->expectData, obj->data); + return obj && STREQ(testPriv->expectData, obj->data); } =20 =20 -static void * +static GObject * testFileCacheNewData(const char *name G_GNUC_UNUSED, void *priv) { testFileCachePrivPtr testPriv =3D priv; =20 - return testFileCacheObjNew(testPriv->newData); + return G_OBJECT(testFileCacheObjNew(testPriv->newData)); } =20 =20 -static void * +static GObject * testFileCacheLoadFile(const char *filename, const char *name G_GNUC_UNUSED, void *priv G_GNUC_UNUSED) @@ -121,12 +119,12 @@ testFileCacheLoadFile(const char *filename, obj =3D testFileCacheObjNew(data); =20 VIR_FREE(data); - return obj; + return G_OBJECT(obj); } =20 =20 static int -testFileCacheSaveFile(void *data G_GNUC_UNUSED, +testFileCacheSaveFile(GObject *data G_GNUC_UNUSED, const char *filename G_GNUC_UNUSED, void *priv) { @@ -160,9 +158,8 @@ typedef testFileCacheData *testFileCacheDataPtr; static int testFileCache(const void *opaque) { - int ret =3D -1; const testFileCacheData *data =3D opaque; - testFileCacheObjPtr obj =3D NULL; + g_autoptr(testFileCacheObj) obj =3D NULL; testFileCachePrivPtr testPriv =3D virFileCacheGetPriv(data->cache); =20 testPriv->dataSaved =3D false; @@ -171,27 +168,23 @@ testFileCache(const void *opaque) =20 if (!(obj =3D virFileCacheLookup(data->cache, data->name))) { fprintf(stderr, "Getting cached data failed.\n"); - goto cleanup; + return -1; } =20 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; } =20 if (data->expectSave !=3D 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; } =20 - ret =3D 0; - - cleanup: - virObjectUnref(obj); - return ret; + return 0; } =20 =20 --=20 2.26.2