From nobody Mon Feb 9 09:57:26 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) client-ip=205.139.110.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 205.139.110.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=1585927007; cv=none; d=zohomail.com; s=zohoarc; b=NdmScfOxIL+ZqilBV3SqAyLPgUs6CNhtpHZwaHPaCGfx967KL/YgaTsouR12r306vWXj6QSPWincEfeDbFvLSdjOg9KPDgAy3f4SuNm0IoB+j6HVfdUUbZ2Y4lR3JjFwpkpEdowz7iBgsX0UlC1+wGj2TjIRXGR7OCFxM8J/LOM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1585927007; 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=9b+HyFak7AkggUOqb9AiHsDcCimNEGJsZJ8upA8xyAg=; b=mubQGzTls/BC1QdPGO6KbggdSAExhR5PZWGe1YrlofNvON6oW15G51WcIbyuXBzuisQPhZO5aJG+GwCHj6PaINvwmAvlnc2UPIcdBkYi1Uw5e27LuILqJe8tyzXHl+JYw74fpXhSsIIfcqDbM2rp3GNWH63jdvi6VjB0RZL0wk8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.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 [205.139.110.120]) by mx.zohomail.com with SMTPS id 1585927007958424.8051667304783; Fri, 3 Apr 2020 08:16:47 -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-332-oHFaclhXOGuLOQhAe2BvMA-1; Fri, 03 Apr 2020 11:16:42 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id BECFE18C35A8; Fri, 3 Apr 2020 15:16:35 +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 8DF7A10002BB; Fri, 3 Apr 2020 15:16:35 +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 3F1F918089CD; Fri, 3 Apr 2020 15:16:35 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 033FGT6c028078 for ; Fri, 3 Apr 2020 11:16:29 -0400 Received: by smtp.corp.redhat.com (Postfix) id 82B9F2022EB1; Fri, 3 Apr 2020 15:16:29 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast03.extmail.prod.ext.rdu2.redhat.com [10.11.55.19]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7E73B2022EB2 for ; Fri, 3 Apr 2020 15:16:25 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (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 05EAF8FF67E for ; Fri, 3 Apr 2020 15:16:25 +0000 (UTC) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-385-FJfTwnWfPIOtDcm1fAhPoA-1; Fri, 03 Apr 2020 11:16:22 -0400 Received: by mail-wr1-f68.google.com with SMTP id a25so9022767wrd.0 for ; Fri, 03 Apr 2020 08:16:22 -0700 (PDT) Received: from localhost.localdomain (public-gprs375156.centertel.pl. [37.47.96.181]) by smtp.gmail.com with ESMTPSA id p13sm12331045wru.3.2020.04.03.08.16.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Apr 2020 08:16:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1585927006; 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=9b+HyFak7AkggUOqb9AiHsDcCimNEGJsZJ8upA8xyAg=; b=XbuLckxXcINkpw7NtK+M4MpTytS+xkE6PTsOQk+Cp+r9NE2Gj9v5cg8FHs/+gIjsqK2J/d a48WbZUYFGGNfOmeoLXi+lXrVgHhiKv/ftZ7KToYQFF70bdLzaaGGK1Lauza9QcPdmLp1n +BCsMf2NWYpkTLtZPeuECpgpE5YPWno= X-MC-Unique: oHFaclhXOGuLOQhAe2BvMA-1 X-MC-Unique: FJfTwnWfPIOtDcm1fAhPoA-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=FEmuaY2ofI9h4Kom5FileHBtnF7SUr21cnZcHUQseZE=; b=mt9fhBYmJbf+lgB4+a9JQP+PUA5NytMCfWVWtz0pYjUH5kjRlgAu3Sd0IWjqOgfdxA 9AClapa3ynjVCjm4UuAtaco8/4zLNmCAJpFOmj9WUs1ZWbU+3LZoCVqtUyr3V0hlnzj2 ovvxCsX4HN/mu71A7H0mssJNESL4KywgzO83CN5z/mm2yAjZ89pTaRqHcqohCVfxl1n9 vCAnkifJ6HzVERXJ9LnwXbe+Kswj6vq9Fh1yy8DR6YL9w2KS284wNyZlqqnPABpkp+Pj TJdsQC8XaALrcP9FNFlVPmGuR21jlq24vZnlEsLBWxXm/EQtNuXYqezTrudc5rWwQA1I q5RQ== X-Gm-Message-State: AGi0PubH9AXm3fkavV2Xg0tD+SFeIcjNrh47tFJ0WGQWXOiy4MN2386n KY+/324ZAEQXZqQr1nhVJCN96a5Tki0= X-Google-Smtp-Source: APiQypJqikVhztjzYx4fXPPG1avKddj1nGgc3DGlgyDl5C7El7INzH5jimItHMG0L5R0TpyFTzsG5g== X-Received: by 2002:adf:a1d6:: with SMTP id v22mr9820025wrv.416.1585926980495; Fri, 03 Apr 2020 08:16:20 -0700 (PDT) From: Rafael Fonseca To: libvir-list@redhat.com Subject: [PATCH 03/36] qemu: convert virQEMUCaps to GObject Date: Fri, 3 Apr 2020 17:15:31 +0200 Message-Id: <20200403151604.106616-4-r4f4rfs@gmail.com> In-Reply-To: <20200403151604.106616-1-r4f4rfs@gmail.com> References: <20200403151604.106616-1-r4f4rfs@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 033FGT6c028078 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.84 on 10.5.11.22 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 | 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; =20 bool kvmSupportsNesting; =20 @@ -677,14 +677,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; +} =20 +static void vir_qemu_caps_class_init(virQEMUCapsClass *klass) +{ + GObjectClass *obj =3D G_OBJECT_CLASS(klass); + + obj->finalize =3D virQEMUCapsFinalize; +} + +static int virQEMUCapsOnceInit(void) +{ if (!(VIR_CLASS_NEW(virQEMUDomainCapsCache, virClassForObjectLockable(= )))) return -1; =20 @@ -864,7 +873,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); @@ -882,7 +891,6 @@ virQEMUCapsInitGuest(virCapsPtr caps, guestarch); =20 VIR_FREE(binary); - virObjectUnref(qemuCaps); =20 return ret; } @@ -1633,7 +1641,7 @@ int virQEMUCapsGetDefaultVersion(virCapsPtr caps, virFileCachePtr capsCache, unsigned int *version) { - virQEMUCapsPtr qemucaps; + g_autoptr(virQEMUCaps) qemucaps =3D NULL; virArch hostarch; virCapsDomainDataPtr capsdata; =20 @@ -1656,7 +1664,6 @@ int virQEMUCapsGetDefaultVersion(virCapsPtr caps, return -1; =20 *version =3D virQEMUCapsGetVersion(qemucaps); - virObjectUnref(qemucaps); return 0; } =20 @@ -1682,26 +1689,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 @@ -1709,6 +1707,8 @@ virQEMUCapsPtr virQEMUCapsNewBinary(const char *binary) { virQEMUCapsPtr qemuCaps =3D virQEMUCapsNew(); + if (!qemuCaps) + return NULL; =20 if (qemuCaps) qemuCaps->binary =3D g_strdup(binary); @@ -1818,7 +1818,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) @@ -1842,10 +1842,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]; @@ -1853,13 +1853,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 @@ -1880,9 +1876,9 @@ virQEMUCapsAccelClear(virQEMUCapsAccelPtr caps) } =20 =20 -void virQEMUCapsDispose(void *obj) +void virQEMUCapsFinalize(GObject *obj) { - virQEMUCapsPtr qemuCaps =3D obj; + virQEMUCapsPtr qemuCaps =3D VIR_QEMU_CAPS(obj); =20 virObjectUnref(qemuCaps->domCapsCache); virBitmapFree(qemuCaps->flags); @@ -1897,6 +1893,8 @@ void virQEMUCapsDispose(void *obj) =20 virQEMUCapsAccelClear(&qemuCaps->kvm); virQEMUCapsAccelClear(&qemuCaps->tcg); + + G_OBJECT_CLASS(vir_qemu_caps_parent_class)->finalize(obj); } =20 void @@ -5142,18 +5140,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 @@ -5164,11 +5162,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; @@ -5184,11 +5182,7 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch, qemuCaps->kvmSupportsNesting =3D virQEMUCapsKVMSupportsNesting(); } =20 - return qemuCaps; - - error: - virObjectUnref(qemuCaps); - return NULL; + return g_steal_pointer(&qemuCaps); } =20 static void * @@ -5212,20 +5206,16 @@ 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 @@ -5341,15 +5331,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 @@ -5453,8 +5441,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 @@ -5462,14 +5449,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) { @@ -5478,7 +5465,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache, } =20 if (!(qemuCaps =3D virQEMUCapsCacheLookup(cache, binary))) - goto cleanup; + return NULL; =20 arch_from_caps =3D virQEMUCapsGetArch(qemuCaps); =20 @@ -5492,7 +5479,7 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache, "match given architecture '%s'"), virArchToString(arch_from_caps), virArchToString(arch)); - goto cleanup; + return NULL; } =20 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; } =20 if (machine) { @@ -5518,7 +5505,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); @@ -5531,11 +5518,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 51ec1a5165..0602c23b10 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" @@ -553,10 +555,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 0ae0547b86..32dd69892a 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2249,8 +2249,8 @@ qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr= priv) =20 VIR_FREE(priv->machineName); =20 - virObjectUnref(priv->qemuCaps); - priv->qemuCaps =3D NULL; + if (priv->qemuCaps) + g_clear_object(&priv->qemuCaps); =20 VIR_FREE(priv->pidfile); =20 @@ -6024,7 +6024,7 @@ qemuDomainPostParseDataFree(void *parseOpaque) { virQEMUCapsPtr qemuCaps =3D parseOpaque; =20 - virObjectUnref(qemuCaps); + g_object_unref(qemuCaps); } =20 =20 @@ -6867,7 +6867,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 6b9f6fb860..3f28c5245c 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5491,7 +5491,8 @@ qemuProcessPrepareQEMUCaps(virDomainObjPtr vm, qemuDomainObjPrivatePtr priv =3D vm->privateData; size_t i; =20 - virObjectUnref(priv->qemuCaps); + if (priv->qemuCaps) + g_object_unref(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..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 =20 #include #include @@ -169,7 +170,8 @@ virFileCacheLoad(virFileCachePtr cache, *data =3D g_steal_pointer(&loadData); =20 cleanup: - virObjectUnref(loadData); + if (loadData) + g_object_unref(loadData); return ret; } =20 @@ -206,7 +208,7 @@ virFileCacheNewData(virFileCachePtr cache, return NULL; =20 if (virFileCacheSave(cache, name, data) < 0) { - virObjectUnref(data); + g_object_unref(data); data =3D 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 =3D NULL; + g_clear_object(data); } } } @@ -306,7 +307,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 +338,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/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; =20 error: - virObjectUnref(qemuCaps); - qemuCaps =3D NULL; + if (qemuCaps) + g_clear_object(&qemuCaps); goto cleanup; } =20 @@ -529,7 +529,7 @@ static int cpuTestGetCPUModels(const struct data *data, virDomainCapsCPUModelsPtr *models) { - virQEMUCapsPtr qemuCaps; + g_autoptr(virQEMUCaps) qemuCaps =3D NULL; =20 *models =3D NULL; =20 @@ -542,8 +542,6 @@ cpuTestGetCPUModels(const struct data *data, =20 *models =3D virQEMUCapsGetCPUModels(qemuCaps, VIR_DOMAIN_VIRT_KVM, NUL= L, NULL); =20 - virObjectUnref(qemuCaps); - return 0; } =20 @@ -876,7 +874,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; @@ -898,7 +896,6 @@ cpuTestJSONCPUID(const void *arg) ret =3D cpuTestCompareXML(data->arch, cpu, result); =20 cleanup: - virObjectUnref(qemuCaps); virCPUDefFree(cpu); VIR_FREE(result); return ret; @@ -909,7 +906,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; @@ -924,7 +921,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 fb803eaa47..d6f0021665 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 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); =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 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 =3D NULL; const char *mock =3D VIR_TEST_MOCK("qemucapsprobe"); =20 if (!virFileIsExecutable(mock)) { @@ -78,7 +78,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 082467f58e..dd8143ff55 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,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" =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 @@ -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.25.1