From nobody Fri Apr 19 23:48:15 2024 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=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1589910476; cv=none; d=zohomail.com; s=zohoarc; b=e8cwy8+8GSc4E+imCLn17azjuCizA4qcCeKQmrZGYKWnwK/6dW5nv01Ky7pMhgeW6WAfp3T+a8ZAQCloY7ikTczAhH7Z0OyO3nvDp95ePjOs0D/gf8PaTbecfugnoRLb6TqvzIFz4l3K1lnTtPzVeVofjswwtzYDT11Eev1VNEs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1589910476; h=Content-Type:Content-Transfer-Encoding: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=2rXEx7WrjXuWZ3q2r0Y1moxKDZAudLhBOfp9gZpwpmw=; b=IQSCBxq0frPYGXyG5nPfBxvEhvnKuLCyg8LYIqnXc6WzXL2VyvkCFOCgM2Qinn0Cw5pYE5qTP10fMrb0b7+z4kFRGBxDaKT8NwfdV8DLtFJTLyBV7jHcTHibj4w3w6wjVTUsQrro+ykKXBnCLoy03RLml/nnLrrRR38rIchcnXU= 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=pass 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 1589910476634768.5070257378511; Tue, 19 May 2020 10:47:56 -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-269-zgaermCTNb2t_b0BWEHIhg-1; Tue, 19 May 2020 13:47:52 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6456C100CCC0; Tue, 19 May 2020 17:47:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 07F1160C84; Tue, 19 May 2020 17:47:46 +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 409154ED3C; Tue, 19 May 2020 17:47:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 04JHlfHF014478 for ; Tue, 19 May 2020 13:47:41 -0400 Received: by smtp.corp.redhat.com (Postfix) id 483845D9DD; Tue, 19 May 2020 17:47:41 +0000 (UTC) Received: from catbus.gsslab.fab.redhat.com (mustard.gsslab.fab.redhat.com [10.33.8.112]) by smtp.corp.redhat.com (Postfix) with ESMTP id AA9125D9C5; Tue, 19 May 2020 17:47:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589910475; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to: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=2rXEx7WrjXuWZ3q2r0Y1moxKDZAudLhBOfp9gZpwpmw=; b=ZA3TNMtJAqFO8SGPI8TGI4gFa4sgWQvqQJif1MC0+it45AJy6wiLBqhalMM2tVdidvssR2 wmbhFUKFRAFUG5FzsyrWYDplxD2VVR4UGstzdjnCrpkw/FfuaDAFz0ZwbiuZJ3n26OON3G XQaxyMrIfxc6NS90qStz8Xu7ao4WfXA= X-MC-Unique: zgaermCTNb2t_b0BWEHIhg-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Subject: [libvirt PATCH 1/6] qemu: stop checking virObjectUnref return value Date: Tue, 19 May 2020 18:41:26 +0100 Message-Id: <20200519174131.91783-2-berrange@redhat.com> In-Reply-To: <20200519174131.91783-1-berrange@redhat.com> References: <20200519174131.91783-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com 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.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Some, but not all, of the monitor event handlers check the virObjectUnref return value to see if the domain was disposed. It should not be possible for this to happen, since the functional ready holds a lock on the domain and has only just acquired an extra reference on the domain a few lines earlier. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Michal Privoznik --- src/qemu/qemu_process.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index f7f6793113..51a086031d 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -307,7 +307,7 @@ qemuProcessHandleMonitorEOF(qemuMonitorPtr mon, processEvent->vm =3D virObjectRef(vm); =20 if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) { - ignore_value(virObjectUnref(vm)); + virObjectUnref(vm); qemuProcessEventFree(processEvent); goto cleanup; } @@ -840,15 +840,13 @@ qemuProcessHandleWatchdog(qemuMonitorPtr mon G_GNUC_U= NUSED, */ processEvent->vm =3D virObjectRef(vm); if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) = < 0) { - if (!virObjectUnref(vm)) - vm =3D NULL; + virObjectUnref(vm); qemuProcessEventFree(processEvent); } } } =20 - if (vm) - virObjectUnlock(vm); + virObjectUnlock(vm); virObjectEventStateQueue(driver->domainEventState, watchdogEvent); virObjectEventStateQueue(driver->domainEventState, lifecycleEvent); =20 @@ -977,7 +975,7 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon G_GNUC_UNU= SED, processEvent->status =3D status; =20 if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0)= { - ignore_value(virObjectUnref(vm)); + virObjectUnref(vm); goto cleanup; } =20 @@ -1039,7 +1037,7 @@ qemuProcessHandleJobStatusChange(qemuMonitorPtr mon G= _GNUC_UNUSED, processEvent->data =3D virObjectRef(job); =20 if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0)= { - ignore_value(virObjectUnref(vm)); + virObjectUnref(vm); goto cleanup; } =20 @@ -1342,14 +1340,12 @@ qemuProcessHandleGuestPanic(qemuMonitorPtr mon G_GN= UC_UNUSED, processEvent->vm =3D virObjectRef(vm); =20 if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) { - if (!virObjectUnref(vm)) - vm =3D NULL; + virObjectUnref(vm); qemuProcessEventFree(processEvent); } =20 cleanup: - if (vm) - virObjectUnlock(vm); + virObjectUnlock(vm); =20 return 0; } @@ -1383,7 +1379,7 @@ qemuProcessHandleDeviceDeleted(qemuMonitorPtr mon G_G= NUC_UNUSED, processEvent->vm =3D virObjectRef(vm); =20 if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) { - ignore_value(virObjectUnref(vm)); + virObjectUnref(vm); goto error; } =20 @@ -1554,7 +1550,7 @@ qemuProcessHandleNicRxFilterChanged(qemuMonitorPtr mo= n G_GNUC_UNUSED, processEvent->vm =3D virObjectRef(vm); =20 if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) { - ignore_value(virObjectUnref(vm)); + virObjectUnref(vm); goto error; } =20 @@ -1593,7 +1589,7 @@ qemuProcessHandleSerialChanged(qemuMonitorPtr mon G_G= NUC_UNUSED, processEvent->vm =3D virObjectRef(vm); =20 if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) { - ignore_value(virObjectUnref(vm)); + virObjectUnref(vm); goto error; } =20 @@ -1873,14 +1869,12 @@ qemuProcessHandleGuestCrashloaded(qemuMonitorPtr mo= n G_GNUC_UNUSED, processEvent->vm =3D virObjectRef(vm); =20 if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) { - if (!virObjectUnref(vm)) - vm =3D NULL; + virObjectUnref(vm); qemuProcessEventFree(processEvent); } =20 cleanup: - if (vm) - virObjectUnlock(vm); + virObjectUnlock(vm); =20 return 0; } --=20 2.24.1 From nobody Fri Apr 19 23:48:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) client-ip=207.211.31.81; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1589910492; cv=none; d=zohomail.com; s=zohoarc; b=S5YHYkKD48QYzU6Xx9lxM6L5220jiVRCIcctsWSVDhVFy2bWwneQAfrHHCjhbKb3PKd/XXMrytYsBmgI499U8C1ftbvRbYhixhVIzPgvE7OjzdLMpZeL9hLLcKcT/JkfRgGpkQhyBQ5FNy5uRNzFfBfiYM3ONNrbmEJy8mk70NM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1589910492; h=Content-Type:Content-Transfer-Encoding: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=YBLlfQ2hG4SGUrUHkoK1o/nPTc70Sbcxuv3WtzFuJV4=; b=T4nkUAahTqX7LNI7Ooqtp5Hxelgp2BgegE8JQo4T6i35kys0aUdG8eshLU799leFnbifLxKViCxuXxS8IbtGfAfucc3EJsvHHoThk3ZhN+PyZUoq4FnCToRB9Q/pNq+rDm7FwC4afnycNHSmkJaWu/XAKOgUXK4iUugj5iql0h0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by mx.zohomail.com with SMTPS id 1589910492273652.4118262354709; Tue, 19 May 2020 10:48:12 -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-41-YMEqFUB6M72dVqwOom-apA-1; Tue, 19 May 2020 13:48:08 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E5B6A8015CE; Tue, 19 May 2020 17:48:02 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C0A1160BE1; Tue, 19 May 2020 17:48:02 +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 8E2C74ED99; Tue, 19 May 2020 17:48:02 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 04JHlg56014487 for ; Tue, 19 May 2020 13:47:42 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2C9485D9DD; Tue, 19 May 2020 17:47:42 +0000 (UTC) Received: from catbus.gsslab.fab.redhat.com (mustard.gsslab.fab.redhat.com [10.33.8.112]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8EFFF5D9C5; Tue, 19 May 2020 17:47:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589910491; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to: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=YBLlfQ2hG4SGUrUHkoK1o/nPTc70Sbcxuv3WtzFuJV4=; b=WvXxJ8OI0Cap/BIt44L6TIemq8fn+nusUfMfmz3p0IRBpXiCzOd0lnmtGhAwsNlcqyQKQ3 If1VuPWnlIax7DvlX+XGlH2UhGjewRDDRmwNkB6vU3z/axETcThGFdntuAwmjPxGlqiW2Z 1AN5PpIp5Wiei4jYT2dMC6qW1rgrqok= X-MC-Unique: YMEqFUB6M72dVqwOom-apA-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Subject: [libvirt PATCH 2/6] src: make virObjectUnref return void Date: Tue, 19 May 2020 18:41:27 +0100 Message-Id: <20200519174131.91783-3-berrange@redhat.com> In-Reply-To: <20200519174131.91783-1-berrange@redhat.com> References: <20200519174131.91783-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com 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.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) To prepare for a conversion to GObject, we need virObjectUnref to have the same API design as g_object_unref, which means it needs to be void. A few places do actually care about the return value though, and in these cases a thread local flag is used to determine if the dispose method was invoked. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Michal Privoznik --- src/admin/libvirt-admin.c | 4 +++- src/datatypes.c | 26 +++++++++++++++++++++++++ src/datatypes.h | 6 ++++++ src/interface/interface_backend_netcf.c | 7 +------ src/libvirt.c | 4 +++- src/qemu/qemu_domain.c | 4 +++- src/qemu/qemu_monitor.c | 14 +++++++++++++ src/qemu/qemu_monitor.h | 3 +++ src/test/test_driver.c | 8 ++++++-- src/util/virfdstream.c | 6 +++++- src/util/virobject.c | 9 ++------- src/util/virobject.h | 2 +- src/vbox/vbox_common.c | 10 ++++++++-- 13 files changed, 81 insertions(+), 22 deletions(-) diff --git a/src/admin/libvirt-admin.c b/src/admin/libvirt-admin.c index 835b5560d2..1d4ac51296 100644 --- a/src/admin/libvirt-admin.c +++ b/src/admin/libvirt-admin.c @@ -295,7 +295,9 @@ virAdmConnectClose(virAdmConnectPtr conn) =20 virCheckAdmConnectReturn(conn, -1); =20 - if (!virObjectUnref(conn)) + virAdmConnectWatchDispose(); + virObjectUnref(conn); + if (virAdmConnectWasDisposed()) return 0; return 1; } diff --git a/src/datatypes.c b/src/datatypes.c index 552115c7a3..1db38c5aa6 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -76,6 +76,9 @@ virClassPtr virAdmClientClass; static void virAdmServerDispose(void *obj); static void virAdmClientDispose(void *obj); =20 +static __thread bool connectDisposed; +static __thread bool admConnectDisposed; + static int virDataTypesOnceInit(void) { @@ -133,6 +136,27 @@ virGetConnect(void) return virObjectLockableNew(virConnectClass); } =20 + +void virConnectWatchDispose(void) +{ + connectDisposed =3D false; +} + +bool virConnectWasDisposed(void) +{ + return connectDisposed; +} + +void virAdmConnectWatchDispose(void) +{ + admConnectDisposed =3D false; +} + +bool virAdmConnectWasDisposed(void) +{ + return admConnectDisposed; +} + /** * virConnectDispose: * @obj: the hypervisor connection to release @@ -145,6 +169,7 @@ virConnectDispose(void *obj) { virConnectPtr conn =3D obj; =20 + connectDisposed =3D true; if (conn->driver) conn->driver->connectClose(conn); =20 @@ -1092,6 +1117,7 @@ virAdmConnectDispose(void *obj) { virAdmConnectPtr conn =3D obj; =20 + admConnectDisposed =3D true; if (conn->privateDataFreeFunc) conn->privateDataFreeFunc(conn); =20 diff --git a/src/datatypes.h b/src/datatypes.h index 2d0407f7ec..d58429ad6c 100644 --- a/src/datatypes.h +++ b/src/datatypes.h @@ -843,6 +843,12 @@ virAdmClientPtr virAdmGetClient(virAdmServerPtr srv, unsigned long long timestamp, unsigned int transport); =20 +/* Thread local to watch if an ObjectUnref causes a Dispoe */ +void virConnectWatchDispose(void); +bool virConnectWasDisposed(void); +void virAdmConnectWatchDispose(void); +bool virAdmConnectWasDisposed(void); + virConnectCloseCallbackDataPtr virNewConnectCloseCallbackData(void); void virConnectCloseCallbackDataRegister(virConnectCloseCallbackDataPtr cl= ose, virConnectPtr conn, diff --git a/src/interface/interface_backend_netcf.c b/src/interface/interf= ace_backend_netcf.c index dd0c1481d9..f30829442d 100644 --- a/src/interface/interface_backend_netcf.c +++ b/src/interface/interface_backend_netcf.c @@ -148,12 +148,7 @@ netcfStateCleanup(void) if (!driver) return -1; =20 - if (virObjectUnref(driver)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Attempt to close netcf state driver " - "with open connections")); - return -1; - } + virObjectUnref(driver); driver =3D NULL; return 0; } diff --git a/src/libvirt.c b/src/libvirt.c index 76bf1fa677..b2d0ba3d23 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -1277,7 +1277,9 @@ virConnectClose(virConnectPtr conn) =20 virCheckConnectReturn(conn, -1); =20 - if (!virObjectUnref(conn)) + virConnectWatchDispose(); + virObjectUnref(conn); + if (virConnectWasDisposed()) return 0; return 1; } diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index d0528dbfe0..bb77cd38d3 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -6681,8 +6681,10 @@ qemuDomainObjExitMonitorInternal(virQEMUDriverPtr dr= iver, qemuDomainObjPrivatePtr priv =3D obj->privateData; bool hasRefs; =20 - hasRefs =3D virObjectUnref(priv->mon); + qemuMonitorWatchDispose(); + virObjectUnref(priv->mon); =20 + hasRefs =3D !qemuMonitorWasDisposed(); if (hasRefs) virObjectUnlock(priv->mon); =20 diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 9c853ccb93..ff7d66eee5 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -146,6 +146,7 @@ struct _qemuMonitor { QEMU_CHECK_MONITOR_FULL(mon, goto label) =20 static virClassPtr qemuMonitorClass; +static __thread bool qemuMonitorDisposed; static void qemuMonitorDispose(void *obj); =20 static int qemuMonitorOnceInit(void) @@ -222,6 +223,7 @@ qemuMonitorDispose(void *obj) qemuMonitorPtr mon =3D obj; =20 VIR_DEBUG("mon=3D%p", mon); + qemuMonitorDisposed =3D true; if (mon->cb && mon->cb->destroy) (mon->cb->destroy)(mon, mon->vm, mon->callbackOpaque); virObjectUnref(mon->vm); @@ -799,6 +801,18 @@ qemuMonitorOpen(virDomainObjPtr vm, } =20 =20 +void qemuMonitorWatchDispose(void) +{ + qemuMonitorDisposed =3D false; +} + + +bool qemuMonitorWasDisposed(void) +{ + return qemuMonitorDisposed; +} + + /** * qemuMonitorRegister: * @mon: QEMU monitor diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 2e35d94bda..99c73e14af 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -387,6 +387,9 @@ qemuMonitorPtr qemuMonitorOpen(virDomainObjPtr vm, void *opaque) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(5); =20 +void qemuMonitorWatchDispose(void); +bool qemuMonitorWasDisposed(void); + void qemuMonitorRegister(qemuMonitorPtr mon) ATTRIBUTE_NONNULL(1); void qemuMonitorUnregister(qemuMonitorPtr mon) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 0506147888..3a085003e2 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -128,6 +128,7 @@ static testDriverPtr defaultPrivconn; static virMutex defaultLock =3D VIR_MUTEX_INITIALIZER; =20 static virClassPtr testDriverClass; +static __thread bool testDriverDisposed; static void testDriverDispose(void *obj); static int testDriverOnceInit(void) { @@ -171,6 +172,8 @@ testDriverDispose(void *obj) g_free(driver->auths[i].password); } g_free(driver->auths); + + testDriverDisposed =3D true; } =20 typedef struct _testDomainNamespaceDef testDomainNamespaceDef; @@ -1446,8 +1449,9 @@ static void testDriverCloseInternal(testDriverPtr driver) { virMutexLock(&defaultLock); - bool disposed =3D !virObjectUnref(driver); - if (disposed && driver =3D=3D defaultPrivconn) + testDriverDisposed =3D false; + virObjectUnref(driver); + if (testDriverDisposed && driver =3D=3D defaultPrivconn) defaultPrivconn =3D NULL; virMutexUnlock(&defaultLock); } diff --git a/src/util/virfdstream.c b/src/util/virfdstream.c index 111e451f8c..1c32be47a9 100644 --- a/src/util/virfdstream.c +++ b/src/util/virfdstream.c @@ -112,6 +112,7 @@ struct virFDStreamData { }; =20 static virClassPtr virFDStreamDataClass; +static __thread bool virFDStreamDataDisposed; =20 static void virFDStreamMsgQueueFree(virFDStreamMsgPtr *queue); =20 @@ -121,6 +122,7 @@ virFDStreamDataDispose(void *obj) virFDStreamDataPtr fdst =3D obj; =20 VIR_DEBUG("obj=3D%p", fdst); + virFDStreamDataDisposed =3D true; virFreeError(fdst->threadErr); virFDStreamMsgQueueFree(&fdst->msg); } @@ -631,7 +633,9 @@ virFDStreamThread(void *opaque) cleanup: fdst->threadQuit =3D true; virObjectUnlock(fdst); - if (!virObjectUnref(fdst)) + virFDStreamDataDisposed =3D false; + virObjectUnref(fdst); + if (virFDStreamDataDisposed) st->privateData =3D NULL; VIR_FORCE_CLOSE(fdin); VIR_FORCE_CLOSE(fdout); diff --git a/src/util/virobject.c b/src/util/virobject.c index c71781550f..4060d7307b 100644 --- a/src/util/virobject.c +++ b/src/util/virobject.c @@ -331,17 +331,14 @@ virObjectRWLockableDispose(void *anyobj) * it hits zero, runs the "dispose" callbacks associated * with the object class and its parents before freeing * @anyobj. - * - * Returns true if the remaining reference count is - * non-zero, false if the object was disposed of */ -bool +void virObjectUnref(void *anyobj) { virObjectPtr obj =3D anyobj; =20 if (VIR_OBJECT_NOTVALID(obj)) - return false; + return; =20 bool lastRef =3D !!g_atomic_int_dec_and_test(&obj->u.s.refs); PROBE(OBJECT_UNREF, "obj=3D%p", obj); @@ -360,8 +357,6 @@ virObjectUnref(void *anyobj) obj->klass =3D (void*)0xDEADBEEF; VIR_FREE(obj); } - - return !lastRef; } =20 =20 diff --git a/src/util/virobject.h b/src/util/virobject.h index 62a8a3d132..cfedb19b13 100644 --- a/src/util/virobject.h +++ b/src/util/virobject.h @@ -106,7 +106,7 @@ void * virObjectNew(virClassPtr klass) ATTRIBUTE_NONNULL(1); =20 -bool +void virObjectUnref(void *obj); =20 G_DEFINE_AUTOPTR_CLEANUP_FUNC(virObject, virObjectUnref); diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index e98ae04ec0..a834a971f0 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -61,6 +61,7 @@ static virClassPtr vboxDriverClass; static virMutex vbox_driver_lock =3D VIR_MUTEX_INITIALIZER; static vboxDriverPtr vbox_driver; static vboxDriverPtr vboxDriverObjNew(void); +static __thread bool vboxDriverDisposed; =20 static int vboxDomainDevicesDefPostParse(virDomainDeviceDefPtr dev G_GNUC_UNUSED, @@ -124,6 +125,7 @@ vboxDriverDispose(void *obj) { vboxDriverPtr driver =3D obj; =20 + vboxDriverDisposed =3D true; virObjectUnref(driver->caps); virObjectUnref(driver->xmlopt); } @@ -250,7 +252,9 @@ vboxGetDriverConnection(void) if (vboxSdkInitialize() < 0 || vboxExtractVersion() < 0) { gVBoxAPI.UPFN.Uninitialize(vbox_driver); /* make sure to clear the pointer when last reference was released= */ - if (!virObjectUnref(vbox_driver)) + vboxDriverDisposed =3D false; + virObjectUnref(vbox_driver); + if (vboxDriverDisposed) vbox_driver =3D NULL; =20 virMutexUnlock(&vbox_driver_lock); @@ -277,7 +281,9 @@ vboxDestroyDriverConnection(void) =20 vboxSdkUninitialize(); =20 - if (!virObjectUnref(vbox_driver)) + vboxDriverDisposed =3D false; + virObjectUnref(vbox_driver); + if (vboxDriverDisposed) vbox_driver =3D NULL; =20 cleanup: --=20 2.24.1 From nobody Fri Apr 19 23:48:15 2024 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=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1589910479; cv=none; d=zohomail.com; s=zohoarc; b=IzHXP9o6eu5rfQsWn8SGcJKrTgVl+84U35WHqqfZIKSOgJ2GzFzuFqwvA31D2g099OW+G8brsOu25hrj55K1703CuJLIUGU6p71dLyYp2yHGq1ERh3qfkoBEbEKimXTydk7QrLIIWbx14BzIE49lmT2/Bn4oANob2f0MPiUZGs4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1589910479; h=Content-Type:Content-Transfer-Encoding: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=CezXhCgcc0+kbx3CSpk7psyQf+s+KTG5ivC/KUjwCZ0=; b=Tur4hfbLH/5Ssj3NKUN7OwH9uabdPrv9oWAPR9f+WJTnaL/vMf5YiYDp5xOgkThzy2WVzhBPicT/LQuXUMo7N01sv3HkODJoUhlZpNHtfuSzLiyHux+ftB17HRm+3USaZI3M8DJvfhopBo1aj9IkpfbrZPi4rcmhuoL3w3p8DQA= 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=pass 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 1589910479356352.58054039253204; Tue, 19 May 2020 10:47:59 -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-438-nhxuF2jaMIOCthWBcXEVmg-1; Tue, 19 May 2020 13:47:55 -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 625771005512; Tue, 19 May 2020 17:47:47 +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 453D05D9C5; Tue, 19 May 2020 17:47:47 +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 CDE431809542; Tue, 19 May 2020 17:47:43 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 04JHlhM4014496 for ; Tue, 19 May 2020 13:47:43 -0400 Received: by smtp.corp.redhat.com (Postfix) id 101C95D9CD; Tue, 19 May 2020 17:47:43 +0000 (UTC) Received: from catbus.gsslab.fab.redhat.com (mustard.gsslab.fab.redhat.com [10.33.8.112]) by smtp.corp.redhat.com (Postfix) with ESMTP id 72FAA5D9C5; Tue, 19 May 2020 17:47:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589910477; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to: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=CezXhCgcc0+kbx3CSpk7psyQf+s+KTG5ivC/KUjwCZ0=; b=a+9HUKWdm8I54du9fPwZXd2jMNCLf8M9gC3cUpZHXwktjA7AuxPWHWGNPzHTkya4fWFpnp iOkO8BllM60r9i5uGEwrvWE59a6svBp7gSxRvcE6KE673klktUnVZ5WH2CcnUvRTTwXC2C M93Y29enDRbaCVQJJQJ9DHKh9SPM+MM= X-MC-Unique: nhxuF2jaMIOCthWBcXEVmg-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Subject: [libvirt PATCH 3/6] test: allocate numa cells separately from driver Date: Tue, 19 May 2020 18:41:28 +0100 Message-Id: <20200519174131.91783-4-berrange@redhat.com> In-Reply-To: <20200519174131.91783-1-berrange@redhat.com> References: <20200519174131.91783-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) GObject has an arbitrary limit on the object struct size of 0xffff bytes. It is expected that any large fields be separately allocated. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Michal Privoznik --- src/test/test_driver.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 3a085003e2..e8bfcd78d2 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -92,7 +92,8 @@ struct _testAuth { typedef struct _testAuth testAuth; typedef struct _testAuth *testAuthPtr; =20 -struct _testDriver { +struct _testDriver +{ virObjectLockable parent; =20 virNodeInfo nodeInfo; @@ -102,7 +103,7 @@ struct _testDriver { virStoragePoolObjListPtr pools; virNodeDeviceObjListPtr devs; int numCells; - testCell cells[MAX_CELLS]; + testCell *cells; size_t numAuths; testAuthPtr auths; =20 @@ -171,6 +172,7 @@ testDriverDispose(void *obj) g_free(driver->auths[i].username); g_free(driver->auths[i].password); } + g_free(driver->cells); g_free(driver->auths); =20 testDriverDisposed =3D true; @@ -1353,6 +1355,7 @@ testOpenDefault(virConnectPtr conn) =20 /* Numa setup */ privconn->numCells =3D 2; + privconn->cells =3D g_new0(testCell, privconn->numCells); for (i =3D 0; i < privconn->numCells; i++) { privconn->cells[i].numCpus =3D 8; privconn->cells[i].mem =3D (i + 1) * 2048 * 1024; --=20 2.24.1 From nobody Fri Apr 19 23:48:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) client-ip=207.211.31.81; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1589910495; cv=none; d=zohomail.com; s=zohoarc; b=Q5vBWdCaY7MLDKW0H72VhCBqUA29CvJevhQK/yCHcXLc97wpo37AFt3PAX6JOXg7zmZdBypldXVj0OLpC6up/pAVrE0gw/FQUO0JZ89cbZqV5+yxGnc41RFXimcvHlX3LB/ul9AIDuFNO+xyAQUoI2VtRQFHz28YfufAo6pekq8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1589910495; h=Content-Type:Content-Transfer-Encoding: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=tSD/ecuLzK8u8so6yMUkp+wzm7a4yAdijyy6pM/hfCU=; b=agOrx1mey4T5lN8C3k6JlD4SsLg6cBTcylbHlBd/fi0YOA0tW5bD0Ek2zZtmPBNwGbqdZj8x63/B6twjkmbduHOoIav5IasjSjz6gJH7l7noN6GxVXcQcXns3UD0w4EmVUh3XJY1FTobEFSYjNL0mb8mHnp1jD+Gp1O1jvQelJ4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) by mx.zohomail.com with SMTPS id 1589910495889916.973582428355; Tue, 19 May 2020 10:48:15 -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-503-mcxCARIxNT-_Nu9Ysar42w-1; Tue, 19 May 2020 13:48:12 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 65A17835B42; Tue, 19 May 2020 17:48:06 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4887062AEB; Tue, 19 May 2020 17:48:06 +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 197194ED99; Tue, 19 May 2020 17:48:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 04JHlhwG014504 for ; Tue, 19 May 2020 13:47:43 -0400 Received: by smtp.corp.redhat.com (Postfix) id E923E5D9DD; Tue, 19 May 2020 17:47:43 +0000 (UTC) Received: from catbus.gsslab.fab.redhat.com (mustard.gsslab.fab.redhat.com [10.33.8.112]) by smtp.corp.redhat.com (Postfix) with ESMTP id 577285D9CD; Tue, 19 May 2020 17:47:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589910494; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to: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=tSD/ecuLzK8u8so6yMUkp+wzm7a4yAdijyy6pM/hfCU=; b=C02dU6ZMs3WZH0Uw7jumWrHeJkNw44kZgOdZi0wxlc9+Of7xKbDfKMFGMKZE8U8qXoYrSw 3Ea6nyrMVXwHnHWJoD17diRCRGAC+k8eOHaodLmjyIxHHX5JNo9jcUsb3SrmXEibUALOxI rw2cG1MQcSRp5wy5pmx/XdbSIO2c7xw= X-MC-Unique: mcxCARIxNT-_Nu9Ysar42w-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Subject: [libvirt PATCH 4/6] src: don't include ref count in debug messages / probes Date: Tue, 19 May 2020 18:41:29 +0100 Message-Id: <20200519174131.91783-5-berrange@redhat.com> In-Reply-To: <20200519174131.91783-1-berrange@redhat.com> References: <20200519174131.91783-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com 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.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) The ref count will be private to the GObject base class and we must not peek at it, even for debugging messages. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Michal Privoznik --- src/admin/libvirt-admin.c | 3 +-- src/libvirt-domain-checkpoint.c | 3 +-- src/libvirt-domain-snapshot.c | 3 +-- src/libvirt-domain.c | 2 +- src/libvirt-host.c | 2 +- src/libvirt-interface.c | 2 +- src/libvirt-network.c | 6 ++---- src/libvirt-nodedev.c | 2 +- src/libvirt-nwfilter.c | 6 ++---- src/libvirt-secret.c | 3 +-- src/libvirt-storage.c | 4 ++-- src/libvirt-stream.c | 3 +-- src/libvirt_qemu_probes.d | 8 ++++---- src/qemu/qemu_monitor.c | 7 ++----- 14 files changed, 21 insertions(+), 33 deletions(-) diff --git a/src/admin/libvirt-admin.c b/src/admin/libvirt-admin.c index 1d4ac51296..b7f21275cb 100644 --- a/src/admin/libvirt-admin.c +++ b/src/admin/libvirt-admin.c @@ -322,8 +322,7 @@ virAdmConnectClose(virAdmConnectPtr conn) int virAdmConnectRef(virAdmConnectPtr conn) { - VIR_DEBUG("conn=3D%p refs=3D%d", conn, - conn ? conn->parent.parent.u.s.refs : 0); + VIR_DEBUG("conn=3D%p", conn); =20 virResetLastError(); virCheckAdmConnectReturn(conn, -1); diff --git a/src/libvirt-domain-checkpoint.c b/src/libvirt-domain-checkpoin= t.c index 432c2d5a52..50627c486c 100644 --- a/src/libvirt-domain-checkpoint.c +++ b/src/libvirt-domain-checkpoint.c @@ -535,8 +535,7 @@ virDomainCheckpointDelete(virDomainCheckpointPtr checkp= oint, int virDomainCheckpointRef(virDomainCheckpointPtr checkpoint) { - VIR_DEBUG("checkpoint=3D%p, refs=3D%d", checkpoint, - checkpoint ? checkpoint->parent.u.s.refs : 0); + VIR_DEBUG("checkpoint=3D%p", checkpoint); =20 virResetLastError(); =20 diff --git a/src/libvirt-domain-snapshot.c b/src/libvirt-domain-snapshot.c index 33593e11e9..f856e5b9b8 100644 --- a/src/libvirt-domain-snapshot.c +++ b/src/libvirt-domain-snapshot.c @@ -1080,8 +1080,7 @@ virDomainSnapshotDelete(virDomainSnapshotPtr snapshot, int virDomainSnapshotRef(virDomainSnapshotPtr snapshot) { - VIR_DEBUG("snapshot=3D%p, refs=3D%d", snapshot, - snapshot ? snapshot->parent.u.s.refs : 0); + VIR_DEBUG("snapshot=3D%p", snapshot); =20 virResetLastError(); =20 diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 37f864b7b0..60b5e65fc3 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -590,7 +590,7 @@ virDomainFree(virDomainPtr domain) int virDomainRef(virDomainPtr domain) { - VIR_DOMAIN_DEBUG(domain, "refs=3D%d", domain ? domain->parent.u.s.refs= : 0); + VIR_DOMAIN_DEBUG(domain); =20 virResetLastError(); =20 diff --git a/src/libvirt-host.c b/src/libvirt-host.c index bc3d1d2803..07d13585f4 100644 --- a/src/libvirt-host.c +++ b/src/libvirt-host.c @@ -51,7 +51,7 @@ VIR_LOG_INIT("libvirt.host"); int virConnectRef(virConnectPtr conn) { - VIR_DEBUG("conn=3D%p refs=3D%d", conn, conn ? conn->parent.parent.u.s.= refs : 0); + VIR_DEBUG("conn=3D%p", conn); =20 virResetLastError(); =20 diff --git a/src/libvirt-interface.c b/src/libvirt-interface.c index 2d2df68131..5eb5980483 100644 --- a/src/libvirt-interface.c +++ b/src/libvirt-interface.c @@ -642,7 +642,7 @@ virInterfaceDestroy(virInterfacePtr iface, unsigned int= flags) int virInterfaceRef(virInterfacePtr iface) { - VIR_DEBUG("iface=3D%p refs=3D%d", iface, iface ? iface->parent.u.s.ref= s : 0); + VIR_DEBUG("iface=3D%p", iface); =20 virResetLastError(); =20 diff --git a/src/libvirt-network.c b/src/libvirt-network.c index 09e24fb0a8..f691b672c7 100644 --- a/src/libvirt-network.c +++ b/src/libvirt-network.c @@ -679,8 +679,7 @@ virNetworkFree(virNetworkPtr network) int virNetworkRef(virNetworkPtr network) { - VIR_DEBUG("network=3D%p refs=3D%d", network, - network ? network->parent.u.s.refs : 0); + VIR_DEBUG("network=3D%p", network); =20 virResetLastError(); =20 @@ -1714,8 +1713,7 @@ virNetworkPortFree(virNetworkPortPtr port) int virNetworkPortRef(virNetworkPortPtr port) { - VIR_DEBUG("port=3D%p refs=3D%d", port, - port ? port->parent.u.s.refs : 0); + VIR_DEBUG("port=3D%p", port); =20 virResetLastError(); =20 diff --git a/src/libvirt-nodedev.c b/src/libvirt-nodedev.c index dce46b7181..cdec123568 100644 --- a/src/libvirt-nodedev.c +++ b/src/libvirt-nodedev.c @@ -477,7 +477,7 @@ virNodeDeviceFree(virNodeDevicePtr dev) int virNodeDeviceRef(virNodeDevicePtr dev) { - VIR_DEBUG("dev=3D%p refs=3D%d", dev, dev ? dev->parent.u.s.refs : 0); + VIR_DEBUG("dev=3D%p", dev); =20 virResetLastError(); =20 diff --git a/src/libvirt-nwfilter.c b/src/libvirt-nwfilter.c index d28220db8a..e299385895 100644 --- a/src/libvirt-nwfilter.c +++ b/src/libvirt-nwfilter.c @@ -503,8 +503,7 @@ virNWFilterGetXMLDesc(virNWFilterPtr nwfilter, unsigned= int flags) int virNWFilterRef(virNWFilterPtr nwfilter) { - VIR_DEBUG("nwfilter=3D%p refs=3D%d", nwfilter, - nwfilter ? nwfilter->parent.u.s.refs : 0); + VIR_DEBUG("nwfilter=3D%p", nwfilter); =20 virResetLastError(); =20 @@ -820,8 +819,7 @@ virNWFilterBindingGetXMLDesc(virNWFilterBindingPtr bind= ing, unsigned int flags) int virNWFilterBindingRef(virNWFilterBindingPtr binding) { - VIR_DEBUG("binding=3D%p refs=3D%d", binding, - binding ? binding->parent.u.s.refs : 0); + VIR_DEBUG("binding=3D%p", binding); =20 virResetLastError(); =20 diff --git a/src/libvirt-secret.c b/src/libvirt-secret.c index 33cbdd7b0b..75d40f53dc 100644 --- a/src/libvirt-secret.c +++ b/src/libvirt-secret.c @@ -658,8 +658,7 @@ virSecretUndefine(virSecretPtr secret) int virSecretRef(virSecretPtr secret) { - VIR_DEBUG("secret=3D%p refs=3D%d", secret, - secret ? secret->parent.u.s.refs : 0); + VIR_DEBUG("secret=3D%p", secret); =20 virResetLastError(); =20 diff --git a/src/libvirt-storage.c b/src/libvirt-storage.c index 0406fe84d3..a45c8b98c1 100644 --- a/src/libvirt-storage.c +++ b/src/libvirt-storage.c @@ -872,7 +872,7 @@ virStoragePoolFree(virStoragePoolPtr pool) int virStoragePoolRef(virStoragePoolPtr pool) { - VIR_DEBUG("pool=3D%p refs=3D%d", pool, pool ? pool->parent.u.s.refs : = 0); + VIR_DEBUG("pool=3D%p", pool); =20 virResetLastError(); =20 @@ -1909,7 +1909,7 @@ virStorageVolFree(virStorageVolPtr vol) int virStorageVolRef(virStorageVolPtr vol) { - VIR_DEBUG("vol=3D%p refs=3D%d", vol, vol ? vol->parent.u.s.refs : 0); + VIR_DEBUG("vol=3D%p", vol); =20 virResetLastError(); =20 diff --git a/src/libvirt-stream.c b/src/libvirt-stream.c index 41b9cc1445..aeb7562018 100644 --- a/src/libvirt-stream.c +++ b/src/libvirt-stream.c @@ -85,8 +85,7 @@ virStreamNew(virConnectPtr conn, int virStreamRef(virStreamPtr stream) { - VIR_DEBUG("stream=3D%p refs=3D%d", stream, - stream ? stream->parent.u.s.refs : 0); + VIR_DEBUG("stream=3D%p", stream); =20 virResetLastError(); =20 diff --git a/src/libvirt_qemu_probes.d b/src/libvirt_qemu_probes.d index e4449a9922..5bcac7667b 100644 --- a/src/libvirt_qemu_probes.d +++ b/src/libvirt_qemu_probes.d @@ -4,10 +4,10 @@ provider libvirt { # binary: libvirtd # module: libvirt/connection-driver/libvirt_driver_qemu.so # Monitor lifecycle - probe qemu_monitor_new(void *mon, int refs, int fd); - probe qemu_monitor_ref(void *mon, int refs); - probe qemu_monitor_unref(void *mon, int refs); - probe qemu_monitor_close(void *monm, int refs); + probe qemu_monitor_new(void *mon, int fd); + probe qemu_monitor_ref(void *mon); + probe qemu_monitor_unref(void *mon); + probe qemu_monitor_close(void *monm); =20 # High level monitor message processing probe qemu_monitor_send_msg(void *mon, const char *msg, int fd); diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index ff7d66eee5..94fae66708 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -714,9 +714,7 @@ qemuMonitorOpenInternal(virDomainObjPtr vm, virObjectLock(mon); qemuMonitorRegister(mon); =20 - PROBE(QEMU_MONITOR_NEW, - "mon=3D%p refs=3D%d fd=3D%d", - mon, mon->parent.parent.u.s.refs, mon->fd); + PROBE(QEMU_MONITOR_NEW, "mon=3D%p fd=3D%d", mon, mon->fd); virObjectUnlock(mon); =20 return mon; @@ -865,8 +863,7 @@ qemuMonitorClose(qemuMonitorPtr mon) return; =20 virObjectLock(mon); - PROBE(QEMU_MONITOR_CLOSE, - "mon=3D%p refs=3D%d", mon, mon->parent.parent.u.s.refs); + PROBE(QEMU_MONITOR_CLOSE, "mon=3D%p", mon); =20 qemuMonitorSetDomainLogLocked(mon, NULL, NULL, NULL); =20 --=20 2.24.1 From nobody Fri Apr 19 23:48:15 2024 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=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1589910550; cv=none; d=zohomail.com; s=zohoarc; b=LKPx1JHcCCJmzEEMa5YyHxUbNuagMOHUw7WdW62bbgf8ilVdxzKAPmZMASyNppG+KSdsUVBwuRG5zxN+wv+SBaNRKfJttqj5n9iYqZHH/n6cZG+I155370WAfnKZYqEdH1f3ZpWTFIZKZCzTKfY3fXWOsBRgCq2r5orhhv0hz/4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1589910550; h=Content-Type:Content-Transfer-Encoding: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=c6vied4Ejoc1dOXkqYtNPtnXLVUEXQncanyt2rtwW14=; b=fhm7h6DWp8p9qIiqicVjU0GSLlENb6QC/flS88ehzcbxn6hh5jzL7CDKeVYuF7cgBBQ4+5ifuhxzcop//l9ymlP31IfQkOEiY4K7ZOWg/cikh2yPiudgMeSiQkJRJubL2W2LfNZdjx1Qq16AVUTHT0qbgytL8qUzgQUGR7RFgjE= 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=pass 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 1589910550975384.2509871438558; Tue, 19 May 2020 10:49:10 -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-288-1SsX_VC-OfKke9tEXlbLFw-1; Tue, 19 May 2020 13:48:18 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C8016805721; Tue, 19 May 2020 17:48:12 +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 AA0285C1D0; Tue, 19 May 2020 17:48:12 +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 783F81809557; Tue, 19 May 2020 17:48:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 04JHliPY014514 for ; Tue, 19 May 2020 13:47:44 -0400 Received: by smtp.corp.redhat.com (Postfix) id CD5285D9DD; Tue, 19 May 2020 17:47:44 +0000 (UTC) Received: from catbus.gsslab.fab.redhat.com (mustard.gsslab.fab.redhat.com [10.33.8.112]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3BA775D9C5; Tue, 19 May 2020 17:47:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589910549; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to: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=c6vied4Ejoc1dOXkqYtNPtnXLVUEXQncanyt2rtwW14=; b=eUXoENLW1Wuf+9Igiak0sKvD/fDUyD1joN5OqG+REN9dlfEIvkcug1L6JcDoxf6KH7eVYd fuY4sePcFfoBdfuXiTijAiUX1H3cj+bTONBP6XYiHLZqP6r3ITLjbzqRjjpWHXGxbqmD4U TonJCWsuaRdbzPRzV2Bsj3hXpO88x/0= X-MC-Unique: 1SsX_VC-OfKke9tEXlbLFw-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Subject: [libvirt PATCH 5/6] src: don't use VIR_FREE on an object allocation Date: Tue, 19 May 2020 18:41:30 +0100 Message-Id: <20200519174131.91783-6-berrange@redhat.com> In-Reply-To: <20200519174131.91783-1-berrange@redhat.com> References: <20200519174131.91783-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com 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.16 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Memory allocated using g_object_new must never be released using VIR_FREE/g_free because g_object_new uses a special allocation strategy internally. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Michal Privoznik --- src/rpc/virnettlscontext.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/rpc/virnettlscontext.c b/src/rpc/virnettlscontext.c index 02c17124a1..ced0cbdcd8 100644 --- a/src/rpc/virnettlscontext.c +++ b/src/rpc/virnettlscontext.c @@ -750,12 +750,9 @@ static virNetTLSContextPtr virNetTLSContextNew(const c= har *cacert, return ctxt; =20 error: + virObjectUnref(ctxt); if (isServer) gnutls_dh_params_deinit(ctxt->dhParams); - if (ctxt->x509cred) - gnutls_certificate_free_credentials(ctxt->x509cred); - VIR_FREE(ctxt->priority); - VIR_FREE(ctxt); return NULL; } =20 --=20 2.24.1 From nobody Fri Apr 19 23:48:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) client-ip=207.211.31.81; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1589910492; cv=none; d=zohomail.com; s=zohoarc; b=QJRM5MHU+LTTe3brgYHnGZus6Wba8xWpfBCUoJhom8IqGQdUWfLT6qk6pVvorNnFueohdOv7GBVPVK81C8e3GzlDQQFQJ8jMXpaDUjMPkXWIopxySDM90oD/HojPaj0oQxMpgnuDaXsWV7wG/QZ60uwuuXpoIzDoTNLMufp5NFw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1589910492; h=Content-Type:Content-Transfer-Encoding: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=KC0a1zybnr6TqD/D9zvC8kVqJ4QGu8XL1o92Wzmpg/w=; b=LuZpfPyWgvngtfmZK5QPWGl1TuZLWfe7mqcH/Zz0CGfbFrGN6UQZqmzTIqWpEJ04yFar7AKevjyTHs+XEP2NnZsnQd2wqau/WvybZr7Aliw4PF6sppGu9ksNID9XI2jugVTikvNNhwYFGfNdX0eVp/No7VSuzemvQciR1wdKhqM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) by mx.zohomail.com with SMTPS id 1589910492090712.852659672668; Tue, 19 May 2020 10:48:12 -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-357-s7Y_-tt9NsW6obWCoIx1CA-1; Tue, 19 May 2020 13:48:08 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E518F100CCC1; Tue, 19 May 2020 17:48:02 +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 C0A6560C84; Tue, 19 May 2020 17:48:02 +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 8F945180954D; Tue, 19 May 2020 17:48:02 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 04JHljg4014525 for ; Tue, 19 May 2020 13:47:45 -0400 Received: by smtp.corp.redhat.com (Postfix) id B1F7C5D9CD; Tue, 19 May 2020 17:47:45 +0000 (UTC) Received: from catbus.gsslab.fab.redhat.com (mustard.gsslab.fab.redhat.com [10.33.8.112]) by smtp.corp.redhat.com (Postfix) with ESMTP id 204785D9C5; Tue, 19 May 2020 17:47:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589910490; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to: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=KC0a1zybnr6TqD/D9zvC8kVqJ4QGu8XL1o92Wzmpg/w=; b=XM8B2NFTalMloV3edw4aDhCAXW6hgIpwhgqZr+X14aeK7PuOMj+TNpUev17yH0R3CbgHU0 F2TZTRTQb2H0TsjzEFu+OSDSaVYd2Qp+r9nGk0TG+FDhtr3941La+b8ZUy9Y0ps3bkEMM/ qQkHpQNa/Qb9yhJdfn5NS9JEJbCepYo= X-MC-Unique: s7Y_-tt9NsW6obWCoIx1CA-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Subject: [libvirt PATCH 6/6] src: make virObject inherit from GObject Date: Tue, 19 May 2020 18:41:31 +0100 Message-Id: <20200519174131.91783-7-berrange@redhat.com> In-Reply-To: <20200519174131.91783-1-berrange@redhat.com> References: <20200519174131.91783-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com 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.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) To avoid bugs with mixing of g_object_(ref|unref) vs virObject(Ref|Unref), we want every virObject to be a GObject. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Michal Privoznik --- src/util/virobject.c | 141 +++++++++++++++++++++++++------------------ src/util/virobject.h | 25 +++----- 2 files changed, 90 insertions(+), 76 deletions(-) diff --git a/src/util/virobject.c b/src/util/virobject.c index 4060d7307b..3f0bcc38ea 100644 --- a/src/util/virobject.c +++ b/src/util/virobject.c @@ -39,6 +39,7 @@ static unsigned int magicCounter =3D 0xCAFE0000; struct _virClass { virClassPtr parent; =20 + GType type; unsigned int magic; char *name; size_t objectSize; @@ -46,25 +47,28 @@ struct _virClass { virObjectDisposeCallback dispose; }; =20 -#define VIR_OBJECT_NOTVALID(obj) (!obj || ((obj->u.s.magic & 0xFFFF0000) != =3D 0xCAFE0000)) +typedef struct _virObjectPrivate virObjectPrivate; +struct _virObjectPrivate { + virClassPtr klass; +}; + + +G_DEFINE_TYPE_WITH_PRIVATE(virObject, vir_object, G_TYPE_OBJECT) + +#define VIR_OBJECT_NOTVALID(obj) (!obj || !VIR_IS_OBJECT(obj)) =20 #define VIR_OBJECT_USAGE_PRINT_WARNING(anyobj, objclass) \ do { \ virObjectPtr obj =3D anyobj; \ - if (VIR_OBJECT_NOTVALID(obj)) { \ - if (!obj) \ - VIR_WARN("Object cannot be NULL"); \ - else \ - VIR_WARN("Object %p has a bad magic number %X", \ - obj, obj->u.s.magic); \ - } else { \ + if (!obj) \ + VIR_WARN("Object cannot be NULL"); \ + if (VIR_OBJECT_NOTVALID(obj)) \ VIR_WARN("Object %p (%s) is not a %s instance", \ - anyobj, obj->klass->name, #objclass); \ - } \ + anyobj, g_type_name_from_instance((void*)anyobj), #ob= jclass); \ } while (0) =20 =20 -static virClassPtr virObjectClass; +static virClassPtr virObjectClassImpl; static virClassPtr virObjectLockableClass; static virClassPtr virObjectRWLockableClass; =20 @@ -74,17 +78,17 @@ static void virObjectRWLockableDispose(void *anyobj); static int virObjectOnceInit(void) { - if (!(virObjectClass =3D virClassNew(NULL, - "virObject", - sizeof(virObject), - 0, - NULL))) + if (!(virObjectClassImpl =3D virClassNew(NULL, + "virObject", + sizeof(virObject), + 0, + NULL))) return -1; =20 - if (!VIR_CLASS_NEW(virObjectLockable, virObjectClass)) + if (!VIR_CLASS_NEW(virObjectLockable, virObjectClassImpl)) return -1; =20 - if (!VIR_CLASS_NEW(virObjectRWLockable, virObjectClass)) + if (!VIR_CLASS_NEW(virObjectRWLockable, virObjectClassImpl)) return -1; =20 return 0; @@ -104,7 +108,7 @@ virClassForObject(void) if (virObjectInitialize() < 0) return NULL; =20 - return virObjectClass; + return virObjectClassImpl; } =20 =20 @@ -138,6 +142,14 @@ virClassForObjectRWLockable(void) } =20 =20 +static void virClassDummyInit(void *klass G_GNUC_UNUSED) +{ +} + +static void virObjectDummyInit(void *obj G_GNUC_UNUSED) +{ +} + /** * virClassNew: * @parent: the parent class @@ -177,25 +189,26 @@ virClassNew(virClassPtr parent, return NULL; } =20 - if (VIR_ALLOC(klass) < 0) - goto error; - + klass =3D g_new0(virClass, 1); klass->parent =3D parent; klass->magic =3D g_atomic_int_add(&magicCounter, 1); - if (klass->magic > 0xCAFEFFFF) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("too many object classes defined")); - goto error; - } klass->name =3D g_strdup(name); klass->objectSize =3D objectSize; + if (parent =3D=3D NULL) { + klass->type =3D vir_object_get_type(); + } else { + klass->type =3D + g_type_register_static_simple(parent->type, + name, + sizeof(virObjectClass), + (GClassInitFunc)virClassDummyIni= t, + objectSize, + (GInstanceInitFunc)virObjectDumm= yInit, + 0); + } klass->dispose =3D dispose; =20 return klass; - - error: - VIR_FREE(klass); - return NULL; } =20 =20 @@ -237,17 +250,13 @@ void * virObjectNew(virClassPtr klass) { virObjectPtr obj =3D NULL; + virObjectPrivate *priv; =20 - if (VIR_ALLOC_VAR(obj, - char, - klass->objectSize - sizeof(virObject)) < 0) - return NULL; - - obj->u.s.magic =3D klass->magic; - obj->klass =3D klass; - g_atomic_int_set(&obj->u.s.refs, 1); + obj =3D g_object_new(klass->type, NULL); =20 - PROBE(OBJECT_NEW, "obj=3D%p classname=3D%s", obj, obj->klass->name); + priv =3D vir_object_get_instance_private(obj); + priv->klass =3D klass; + PROBE(OBJECT_NEW, "obj=3D%p classname=3D%s", obj, priv->klass->name); =20 return obj; } @@ -304,6 +313,33 @@ virObjectRWLockableNew(virClassPtr klass) return obj; } =20 +static void vir_object_finalize(GObject *gobj) +{ + PROBE(OBJECT_DISPOSE, "obj=3D%p", gobj); + virObjectPtr obj =3D VIR_OBJECT(gobj); + virObjectPrivate *priv =3D vir_object_get_instance_private(obj); + + virClassPtr klass =3D priv->klass; + while (klass) { + if (klass->dispose) + klass->dispose(obj); + klass =3D klass->parent; + } + + G_OBJECT_CLASS(vir_object_parent_class)->finalize(gobj); +} + +static void vir_object_init(virObject *obj G_GNUC_UNUSED) +{ +} + + +static void vir_object_class_init(virObjectClass *klass) +{ + GObjectClass *obj =3D G_OBJECT_CLASS(klass); + + obj->finalize =3D vir_object_finalize; +} =20 static void virObjectLockableDispose(void *anyobj) @@ -340,23 +376,8 @@ virObjectUnref(void *anyobj) if (VIR_OBJECT_NOTVALID(obj)) return; =20 - bool lastRef =3D !!g_atomic_int_dec_and_test(&obj->u.s.refs); + g_object_unref(anyobj); PROBE(OBJECT_UNREF, "obj=3D%p", obj); - if (lastRef) { - PROBE(OBJECT_DISPOSE, "obj=3D%p", obj); - virClassPtr klass =3D obj->klass; - while (klass) { - if (klass->dispose) - klass->dispose(obj); - klass =3D klass->parent; - } - - /* Clear & poison object */ - memset(obj, 0, obj->klass->objectSize); - obj->u.s.magic =3D 0xDEADBEEF; - obj->klass =3D (void*)0xDEADBEEF; - VIR_FREE(obj); - } } =20 =20 @@ -376,7 +397,8 @@ virObjectRef(void *anyobj) =20 if (VIR_OBJECT_NOTVALID(obj)) return NULL; - g_atomic_int_add(&obj->u.s.refs, 1); + + g_object_ref(obj); PROBE(OBJECT_REF, "obj=3D%p", obj); return anyobj; } @@ -539,10 +561,13 @@ virObjectIsClass(void *anyobj, virClassPtr klass) { virObjectPtr obj =3D anyobj; + virObjectPrivate *priv; + if (VIR_OBJECT_NOTVALID(obj)) return false; =20 - return virClassIsDerivedFrom(obj->klass, klass); + priv =3D vir_object_get_instance_private(obj); + return virClassIsDerivedFrom(priv->klass, klass); } =20 =20 diff --git a/src/util/virobject.h b/src/util/virobject.h index cfedb19b13..18a9f098a6 100644 --- a/src/util/virobject.h +++ b/src/util/virobject.h @@ -24,6 +24,8 @@ #include "internal.h" #include "virthread.h" =20 +#include + typedef struct _virClass virClass; typedef virClass *virClassPtr; =20 @@ -38,22 +40,11 @@ typedef virObjectRWLockable *virObjectRWLockablePtr; =20 typedef void (*virObjectDisposeCallback)(void *obj); =20 -/* Most code should not play with the contents of this struct; however, - * the struct itself is public so that it can be embedded as the first - * field of a subclassed object. */ -struct _virObject { - /* Ensure correct alignment of this and all subclasses, even on - * platforms where 'long long' or function pointers have stricter - * requirements than 'void *'. */ - union { - long long dummy_align1; - void (*dummy_align2) (void); - struct { - unsigned int magic; - int refs; - } s; - } u; - virClassPtr klass; +#define VIR_TYPE_OBJECT vir_object_get_type() +G_DECLARE_DERIVABLE_TYPE(virObject, vir_object, VIR, OBJECT, GObject); + +struct _virObjectClass { + GObjectClass parent; }; =20 struct _virObjectLockable { @@ -109,8 +100,6 @@ virObjectNew(virClassPtr klass) void virObjectUnref(void *obj); =20 -G_DEFINE_AUTOPTR_CLEANUP_FUNC(virObject, virObjectUnref); - void * virObjectRef(void *obj); =20 --=20 2.24.1