From nobody Thu May 2 09:34:03 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1519808211232167.19902112133127; Wed, 28 Feb 2018 00:56:51 -0800 (PST) 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 mx1.redhat.com (Postfix) with ESMTPS id 21EF25F73A; Wed, 28 Feb 2018 08:56:49 +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 E56125D6A5; Wed, 28 Feb 2018 08:56: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 619E16B542; Wed, 28 Feb 2018 08:56:45 +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 w1S8uhF7021145 for ; Wed, 28 Feb 2018 03:56:43 -0500 Received: by smtp.corp.redhat.com (Postfix) id 53DBD5D9CC; Wed, 28 Feb 2018 08:56:43 +0000 (UTC) Received: from mx1.redhat.com (ext-mx02.extmail.prod.ext.phx2.redhat.com [10.5.110.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 480CC5D9C9 for ; Wed, 28 Feb 2018 08:56:41 +0000 (UTC) Received: from mxct.zte.com.cn (out1.zte.com.cn [202.103.147.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B8A5576520 for ; Wed, 28 Feb 2018 08:56:31 +0000 (UTC) Received: from mse01.zte.com.cn (unknown [10.30.3.20]) by Forcepoint Email with ESMTPS id 1E89E9CBC55AF9861B6A; Wed, 28 Feb 2018 16:56:25 +0800 (CST) Received: from notes_smtp.zte.com.cn ([10.30.1.239]) by mse01.zte.com.cn with ESMTP id w1S8uFBs041707; Wed, 28 Feb 2018 16:56:15 +0800 (GMT-8) (envelope-from peng.hao2@zte.com.cn) Received: from localhost.localdomain.localdomain ([10.74.120.59]) by szsmtp06.zte.com.cn (Lotus Domino Release 8.5.3FP6) with ESMTP id 2018022816562128-442612 ; Wed, 28 Feb 2018 16:56:21 +0800 From: Peng Hao To: libvir-list@redhat.com Date: Thu, 1 Mar 2018 01:09:40 +0800 Message-Id: <1519837780-75609-1-git-send-email-peng.hao2@zte.com.cn> X-MIMETrack: Itemize by SMTP Server on SZSMTP06/server/zte_ltd(Release 8.5.3FP6|November 21, 2013) at 2018-02-28 16:56:21, Serialize by Router on notes_smtp/zte_ltd(Release 9.0.1FP7|August 17, 2016) at 2018-02-28 16:56:08, Serialize complete at 2018-02-28 16:56:08 X-MAIL: mse01.zte.com.cn w1S8uFBs041707 X-Greylist: Sender passed SPF test, ACL 227 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 28 Feb 2018 08:56:34 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 28 Feb 2018 08:56:34 +0000 (UTC) for IP:'202.103.147.172' DOMAIN:'out1.zte.com.cn' HELO:'mxct.zte.com.cn' FROM:'peng.hao2@zte.com.cn' RCPT:'' X-RedHat-Spam-Score: -0.03 (DATE_IN_FUTURE_06_12, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_PASS, T_RP_MATCHES_RCVD) 202.103.147.172 out1.zte.com.cn 202.103.147.172 out1.zte.com.cn X-Scanned-By: MIMEDefang 2.78 on 10.5.110.26 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Cc: root , Peng Hao , Wang Yechao Subject: [libvirt] [PATCH] qemu: monitor: fix unsafe monitor access 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: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Wed, 28 Feb 2018 08:56:50 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" From: root qemuDomainObjExitMonitor is unsafe domain lock released when qemuDomainObjEnterMonitor finish, So other thread (qemuProcessStop) has chance to modify priv->mon to NULL. qemuDomainObjExitMonitor will never release the mon->lock, that may cause problem: thread get monitor ptr early, and then try to get mon->lock, it will block forerver cause mon->lock not released by qemuDomainObjExitMonitor. Signed-off-by: Wang Yechao Signed-off-by: Peng Hao --- src/qemu/THREADS.txt | 12 +- src/qemu/qemu_block.c | 5 +- src/qemu/qemu_domain.c | 64 +++++---- src/qemu/qemu_domain.h | 12 +- src/qemu/qemu_driver.c | 258 ++++++++++++++++++++-------------- src/qemu/qemu_hotplug.c | 296 ++++++++++++++++++++++-------------= ---- src/qemu/qemu_migration.c | 104 ++++++++------ src/qemu/qemu_migration_cookie.c | 5 +- src/qemu/qemu_process.c | 108 ++++++++------ 9 files changed, 507 insertions(+), 357 deletions(-) mode change 100644 =3D> 100755 src/qemu/THREADS.txt mode change 100644 =3D> 100755 src/qemu/qemu_block.c mode change 100644 =3D> 100755 src/qemu/qemu_domain.c mode change 100644 =3D> 100755 src/qemu/qemu_domain.h mode change 100644 =3D> 100755 src/qemu/qemu_driver.c mode change 100644 =3D> 100755 src/qemu/qemu_hotplug.c mode change 100644 =3D> 100755 src/qemu/qemu_migration.c mode change 100644 =3D> 100755 src/qemu/qemu_migration_cookie.c mode change 100644 =3D> 100755 src/qemu/qemu_process.c diff --git a/src/qemu/THREADS.txt b/src/qemu/THREADS.txt old mode 100644 new mode 100755 index 7243161..6a56003 --- a/src/qemu/THREADS.txt +++ b/src/qemu/THREADS.txt @@ -228,6 +228,7 @@ Design patterns =20 virDomainObjPtr obj; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; =20 obj =3D qemuDomObjFromDomain(dom); =20 @@ -236,9 +237,9 @@ Design patterns ...do prep work... =20 if (virDomainObjIsActive(vm)) { - qemuDomainObjEnterMonitor(obj); + mon =3D qemuDomainObjEnterMonitor(obj); qemuMonitorXXXX(priv->mon); - qemuDomainObjExitMonitor(obj); + qemuDomainObjExitMonitor(obj, mon); } =20 ...do final work... @@ -251,6 +252,7 @@ Design patterns =20 virDomainObjPtr obj; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; =20 obj =3D qemuDomObjFromDomain(dom); =20 @@ -260,12 +262,12 @@ Design patterns ...do prep work... =20 if (qemuDomainObjEnterMonitorAsync(driver, obj, - QEMU_ASYNC_JOB_TYPE) < 0) { + QEMU_ASYNC_JOB_TYPE, &mon) < 0) { /* domain died in the meantime */ goto error; } ...start qemu job... - qemuDomainObjExitMonitor(driver, obj); + qemuDomainObjExitMonitor(driver, obj, mon); =20 while (!finished) { if (qemuDomainObjEnterMonitorAsync(driver, obj, @@ -274,7 +276,7 @@ Design patterns goto error; } ...monitor job progress... - qemuDomainObjExitMonitor(driver, obj); + qemuDomainObjExitMonitor(driver, obj, mon); =20 virObjectUnlock(obj); sleep(aWhile); diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c old mode 100644 new mode 100755 index 585f025..d437802 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -327,17 +327,18 @@ qemuBlockNodeNamesDetect(virQEMUDriverPtr driver, virDomainDiskDefPtr disk; size_t i; int ret =3D -1; + qemuMonitorPtr mon; =20 if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_QUERY_NAMED_BLOCK_NODES)) return 0; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 data =3D qemuMonitorQueryNamedBlockNodes(qemuDomainGetMonitor(vm)); blockstats =3D qemuMonitorQueryBlockstats(qemuDomainGetMonitor(vm)); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || !data || !blockstats) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || !data || !blockst= ats) goto cleanup; =20 if (!(disktable =3D qemuBlockNodeNameGetBackingChain(data, blockstats)= )) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c old mode 100644 new mode 100755 index aa65295..a09235e --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -5602,15 +5602,16 @@ qemuDomainObjEnterMonitorInternal(virQEMUDriverPtr = driver, =20 static void ATTRIBUTE_NONNULL(1) qemuDomainObjExitMonitorInternal(virQEMUDriverPtr driver, - virDomainObjPtr obj) + virDomainObjPtr obj, + qemuMonitorPtr mon) { qemuDomainObjPrivatePtr priv =3D obj->privateData; bool hasRefs; =20 - hasRefs =3D virObjectUnref(priv->mon); + hasRefs =3D virObjectUnref(mon); =20 if (hasRefs) - virObjectUnlock(priv->mon); + virObjectUnlock(mon); =20 virObjectLock(obj); VIR_DEBUG("Exited monitor (mon=3D%p vm=3D%p name=3D%s)", @@ -5624,11 +5625,13 @@ qemuDomainObjExitMonitorInternal(virQEMUDriverPtr d= river, qemuDomainObjEndJob(driver, obj); } =20 -void qemuDomainObjEnterMonitor(virQEMUDriverPtr driver, +qemuMonitorPtr qemuDomainObjEnterMonitor(virQEMUDriverPtr driver, virDomainObjPtr obj) { + qemuMonitorPtr mon =3D qemuDomainGetMonitor(obj); ignore_value(qemuDomainObjEnterMonitorInternal(driver, obj, QEMU_ASYNC_JOB_NONE)); + return mon; } =20 /* obj must NOT be locked before calling @@ -5642,9 +5645,10 @@ void qemuDomainObjEnterMonitor(virQEMUDriverPtr driv= er, * from the live definition could no longer be valid. */ int qemuDomainObjExitMonitor(virQEMUDriverPtr driver, - virDomainObjPtr obj) + virDomainObjPtr obj, + qemuMonitorPtr mon) { - qemuDomainObjExitMonitorInternal(driver, obj); + qemuDomainObjExitMonitorInternal(driver, obj, mon); if (!virDomainObjIsActive(obj)) { if (!virGetLastError()) virReportError(VIR_ERR_OPERATION_FAILED, "%s", @@ -5671,8 +5675,10 @@ int qemuDomainObjExitMonitor(virQEMUDriverPtr driver, int qemuDomainObjEnterMonitorAsync(virQEMUDriverPtr driver, virDomainObjPtr obj, - qemuDomainAsyncJob asyncJob) + qemuDomainAsyncJob asyncJob, + qemuMonitorPtr *mon) { + *mon =3D qemuDomainGetMonitor(obj); return qemuDomainObjEnterMonitorInternal(driver, obj, asyncJob); } =20 @@ -6621,6 +6627,7 @@ qemuDomainSnapshotDiscard(virQEMUDriverPtr driver, { char *snapFile =3D NULL; int ret =3D -1; + qemuMonitorPtr mon; qemuDomainObjPrivatePtr priv; virDomainSnapshotObjPtr parentsnap =3D NULL; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); @@ -6633,10 +6640,10 @@ qemuDomainSnapshotDiscard(virQEMUDriverPtr driver, goto cleanup; } else { priv =3D vm->privateData; - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); /* we continue on even in the face of error */ qemuMonitorDeleteSnapshot(priv->mon, snap->def->name); - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); } } =20 @@ -7477,14 +7484,15 @@ qemuDomainUpdateDeviceList(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; char **aliases; int rc; + qemuMonitorPtr mon; =20 if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE_DEL_EVENT)) return 0; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; rc =3D qemuMonitorGetDeviceAliases(priv->mon, &aliases); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) return -1; if (rc < 0) return -1; @@ -7504,16 +7512,17 @@ qemuDomainUpdateMemoryDeviceInfo(virQEMUDriverPtr d= river, virHashTablePtr meminfo =3D NULL; int rc; size_t i; + qemuMonitorPtr mon; =20 if (vm->def->nmems =3D=3D 0) return 0; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 rc =3D qemuMonitorGetMemoryDeviceInfo(priv->mon, &meminfo); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { virHashFree(meminfo); return -1; } @@ -8243,6 +8252,7 @@ qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr dr= iver, virDomainObjPtr vm) { qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMonitorPtr mon; unsigned long long balloon; int ret =3D -1; =20 @@ -8275,9 +8285,9 @@ qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr dr= iver, goto endjob; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorGetBalloonInfo(priv->mon, &balloon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -8608,15 +8618,16 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver, bool hotplug; int rc; int ret =3D -1; + qemuMonitorPtr mon; =20 hotplug =3D qemuDomainSupportsNewVcpuHotplug(vm); =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 rc =3D qemuMonitorGetCPUInfo(qemuDomainGetMonitor(vm), &info, maxvcpus= , hotplug); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if (rc < 0) @@ -8721,6 +8732,7 @@ qemuDomainRefreshVcpuHalted(virQEMUDriverPtr driver, virBitmapPtr haltedmap =3D NULL; size_t i; int ret =3D -1; + qemuMonitorPtr mon; =20 /* Not supported currently for TCG, see qemuDomainRefreshVcpuInfo */ if (vm->def->virtType =3D=3D VIR_DOMAIN_VIRT_QEMU) @@ -8731,12 +8743,12 @@ qemuDomainRefreshVcpuHalted(virQEMUDriverPtr driver, if (!ARCH_IS_S390(vm->def->os.arch)) return 0; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 haltedmap =3D qemuMonitorGetCpuHalted(qemuDomainGetMonitor(vm), maxvcp= us); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || !haltedmap) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || !haltedmap) goto cleanup; =20 for (i =3D 0; i < maxvcpus; i++) { @@ -9081,13 +9093,14 @@ qemuDomainCheckMonitor(virQEMUDriverPtr driver, { qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 ret =3D qemuMonitorCheck(priv->mon); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) return -1; =20 return ret; @@ -11399,13 +11412,14 @@ qemuDomainCheckMigrationCapabilities(virQEMUDrive= rPtr driver, char **capStr; int ret =3D -1; int rc; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 rc =3D qemuMonitorGetMigrationCapabilities(priv->mon, &caps); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || rc < 0) goto cleanup; =20 if (!caps) { @@ -11429,14 +11443,14 @@ qemuDomainCheckMigrationCapabilities(virQEMUDrive= rPtr driver, } =20 if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT)) { - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; =20 rc =3D qemuMonitorSetMigrationCapability(priv->mon, QEMU_MONITOR_MIGRATION_CAPS= _EVENTS, true); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if (rc < 0) { diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h old mode 100644 new mode 100755 index f3ec5d8..ceee781 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -517,17 +517,19 @@ void qemuDomainObjReleaseAsyncJob(virDomainObjPtr obj= ); =20 qemuMonitorPtr qemuDomainGetMonitor(virDomainObjPtr vm) ATTRIBUTE_NONNULL(1); -void qemuDomainObjEnterMonitor(virQEMUDriverPtr driver, +qemuMonitorPtr qemuDomainObjEnterMonitor(virQEMUDriverPtr driver, virDomainObjPtr obj) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); int qemuDomainObjExitMonitor(virQEMUDriverPtr driver, - virDomainObjPtr obj) - ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) + virDomainObjPtr obj, + qemuMonitorPtr mon) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK; int qemuDomainObjEnterMonitorAsync(virQEMUDriverPtr driver, virDomainObjPtr obj, - qemuDomainAsyncJob asyncJob) - ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; + qemuDomainAsyncJob asyncJob, + qemuMonitorPtr *mon) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4) ATTRIBU= TE_RETURN_CHECK; =20 =20 qemuAgentPtr qemuDomainObjEnterAgent(virDomainObjPtr obj) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c old mode 100644 new mode 100755 index 8d77d89..ef84596 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1987,6 +1987,7 @@ static int qemuDomainShutdownFlags(virDomainPtr dom, = unsigned int flags) { virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; + qemuMonitorPtr mon; int ret =3D -1; qemuDomainObjPrivatePtr priv; bool useAgent =3D false, agentRequested, acpiRequested; @@ -2057,9 +2058,9 @@ static int qemuDomainShutdownFlags(virDomainPtr dom, = unsigned int flags) } =20 qemuDomainSetFakeReboot(driver, vm, isReboot); - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorSystemPowerdown(priv->mon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; } =20 @@ -2082,6 +2083,7 @@ qemuDomainReboot(virDomainPtr dom, unsigned int flags) { virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; + qemuMonitorPtr mon; int ret =3D -1; qemuDomainObjPrivatePtr priv; bool useAgent =3D false, agentRequested, acpiRequested; @@ -2159,9 +2161,9 @@ qemuDomainReboot(virDomainPtr dom, unsigned int flags) } #endif qemuDomainSetFakeReboot(driver, vm, isReboot); - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorSystemPowerdown(priv->mon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; } =20 @@ -2179,6 +2181,7 @@ qemuDomainReset(virDomainPtr dom, unsigned int flags) { virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; + qemuMonitorPtr mon; int ret =3D -1; qemuDomainObjPrivatePtr priv; virDomainState state; @@ -2201,9 +2204,9 @@ qemuDomainReset(virDomainPtr dom, unsigned int flags) } =20 priv =3D vm->privateData; - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorSystemReset(priv->mon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 priv->fakeReboot =3D false; @@ -2360,6 +2363,7 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom,= unsigned long newmem, virDomainObjPtr vm; virDomainDefPtr def; virDomainDefPtr persistentDef; + qemuMonitorPtr mon; int ret =3D -1, r; virQEMUDriverConfigPtr cfg =3D NULL; =20 @@ -2438,9 +2442,9 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom,= unsigned long newmem, =20 if (def) { priv =3D vm->privateData; - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); r =3D qemuMonitorSetBalloon(priv->mon, newmem); - if (qemuDomainObjExitMonitor(driver, vm) < 0 || r < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || r < 0) goto endjob; =20 /* Lack of balloon support is a fatal error */ @@ -2488,6 +2492,7 @@ static int qemuDomainSetMemoryStatsPeriod(virDomainPt= r dom, int period, virDomainObjPtr vm; virDomainDefPtr def; virDomainDefPtr persistentDef; + qemuMonitorPtr mon; int ret =3D -1, r; virQEMUDriverConfigPtr cfg =3D NULL; =20 @@ -2520,9 +2525,9 @@ static int qemuDomainSetMemoryStatsPeriod(virDomainPt= r dom, int period, goto endjob; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); r =3D qemuMonitorSetMemoryStatsPeriod(priv->mon, def->memballoon, = period); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto endjob; if (r < 0) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", @@ -2562,6 +2567,7 @@ static int qemuDomainInjectNMI(virDomainPtr domain, u= nsigned int flags) { virQEMUDriverPtr driver =3D domain->conn->privateData; virDomainObjPtr vm =3D NULL; + qemuMonitorPtr mon; int ret =3D -1; qemuDomainObjPrivatePtr priv; =20 @@ -2584,9 +2590,9 @@ static int qemuDomainInjectNMI(virDomainPtr domain, u= nsigned int flags) goto endjob; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorInjectNMI(priv->mon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -2608,6 +2614,7 @@ static int qemuDomainSendKey(virDomainPtr domain, virDomainObjPtr vm =3D NULL; int ret =3D -1; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; =20 virCheckFlags(0, -1); =20 @@ -2647,9 +2654,9 @@ static int qemuDomainSendKey(virDomainPtr domain, goto endjob; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorSendKey(priv->mon, holdtime, keycodes, nkeycodes); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -3806,6 +3813,7 @@ qemuDumpToFd(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; bool detach =3D false; int ret =3D -1; + qemuMonitorPtr mon; =20 if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DUMP_GUEST_MEMORY)) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", @@ -3825,7 +3833,7 @@ qemuDumpToFd(virQEMUDriverPtr driver, priv->job.dump_memory_only =3D true; } =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 if (dumpformat) { @@ -3837,14 +3845,14 @@ qemuDumpToFd(virQEMUDriverPtr driver, "for this QEMU binary"), dumpformat); ret =3D -1; - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto cleanup; } } =20 ret =3D qemuMonitorDumpToFd(priv->mon, fd, dumpformat, detach); =20 - if ((qemuDomainObjExitMonitor(driver, vm) < 0) || ret < 0) + if ((qemuDomainObjExitMonitor(driver, vm, mon) < 0) || ret < 0) goto cleanup; =20 if (detach) @@ -3961,6 +3969,7 @@ qemuDomainCoreDumpWithFormat(virDomainPtr dom, { virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; + qemuMonitorPtr mon; qemuDomainObjPrivatePtr priv =3D NULL; bool resume =3D false, paused =3D false; int ret =3D -1; @@ -4025,9 +4034,9 @@ qemuDomainCoreDumpWithFormat(virDomainPtr dom, } else if (((resume && paused) || (flags & VIR_DUMP_RESET)) && virDomainObjIsActive(vm)) { if ((ret =3D=3D 0) && (flags & VIR_DUMP_RESET)) { - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorSystemReset(priv->mon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; } =20 @@ -4075,6 +4084,7 @@ qemuDomainScreenshot(virDomainPtr dom, { virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; + qemuMonitorPtr mon; qemuDomainObjPrivatePtr priv; char *tmp =3D NULL; int tmp_fd =3D -1; @@ -4122,12 +4132,12 @@ qemuDomainScreenshot(virDomainPtr dom, =20 qemuSecuritySetSavedStateLabel(driver->securityManager, vm->def, tmp); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorScreendump(priv->mon, tmp) < 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto endjob; } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto endjob; =20 if (VIR_CLOSE(tmp_fd) < 0) { @@ -4603,6 +4613,7 @@ processNicRxFilterChangedEvent(virQEMUDriverPtr drive= r, qemuDomainObjPrivatePtr priv =3D vm->privateData; virDomainDeviceDef dev; virDomainNetDefPtr def; + qemuMonitorPtr mon; virNetDevRxFilterPtr guestFilter =3D NULL; virNetDevRxFilterPtr hostFilter =3D NULL; int ret; @@ -4648,9 +4659,9 @@ processNicRxFilterChangedEvent(virQEMUDriverPtr drive= r, VIR_DEBUG("process NIC_RX_FILTER_CHANGED event for network " "device %s in domain %s", def->info.alias, vm->def->name); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorQueryRxFilter(priv->mon, devAlias, &guestFilter); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; if (ret < 0) goto endjob; @@ -5552,6 +5563,7 @@ qemuDomainGetIOThreadsLive(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv; qemuMonitorIOThreadInfoPtr *iothreads =3D NULL; virDomainIOThreadInfoPtr *info_ret =3D NULL; + qemuMonitorPtr mon; int niothreads =3D 0; size_t i; int ret =3D -1; @@ -5572,9 +5584,9 @@ qemuDomainGetIOThreadsLive(virQEMUDriverPtr driver, goto endjob; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); niothreads =3D qemuMonitorGetIOThreads(priv->mon, &iothreads); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto endjob; if (niothreads < 0) goto endjob; @@ -5872,11 +5884,12 @@ qemuDomainHotplugAddIOThread(virQEMUDriverPtr drive= r, int new_niothreads =3D 0; qemuMonitorIOThreadInfoPtr *new_iothreads =3D NULL; virDomainIOThreadIDDefPtr iothrid; + qemuMonitorPtr mon; =20 if (virAsprintf(&alias, "iothread%u", iothread_id) < 0) return -1; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 rc =3D qemuMonitorAddObject(priv->mon, "iothread", alias, NULL); exp_niothreads++; @@ -5891,7 +5904,7 @@ qemuDomainHotplugAddIOThread(virQEMUDriverPtr driver, &new_iothreads)) < 0) goto exit_monitor; =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if (new_niothreads !=3D exp_niothreads) { @@ -5940,7 +5953,7 @@ qemuDomainHotplugAddIOThread(virQEMUDriverPtr driver, return ret; =20 exit_monitor: - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto cleanup; } =20 @@ -5958,11 +5971,12 @@ qemuDomainHotplugDelIOThread(virQEMUDriverPtr drive= r, unsigned int exp_niothreads =3D vm->def->niothreadids; int new_niothreads =3D 0; qemuMonitorIOThreadInfoPtr *new_iothreads =3D NULL; + qemuMonitorPtr mon; =20 if (virAsprintf(&alias, "iothread%u", iothread_id) < 0) return -1; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 rc =3D qemuMonitorDelObject(priv->mon, alias); exp_niothreads--; @@ -5973,7 +5987,7 @@ qemuDomainHotplugDelIOThread(virQEMUDriverPtr driver, &new_iothreads)) < 0) goto exit_monitor; =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if (new_niothreads !=3D exp_niothreads) { @@ -6004,7 +6018,7 @@ qemuDomainHotplugDelIOThread(virQEMUDriverPtr driver, return ret; =20 exit_monitor: - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto cleanup; } =20 @@ -10826,6 +10840,7 @@ qemuDomainBlockResize(virDomainPtr dom, int ret =3D -1; char *device =3D NULL; virDomainDiskDefPtr disk =3D NULL; + qemuMonitorPtr mon; =20 virCheckFlags(VIR_DOMAIN_BLOCK_RESIZE_BYTES, -1); =20 @@ -10879,12 +10894,12 @@ qemuDomainBlockResize(virDomainPtr dom, if (!(device =3D qemuAliasFromDisk(disk))) goto endjob; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorBlockResize(priv->mon, device, size) < 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto endjob; } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto endjob; =20 ret =3D 0; @@ -10945,6 +10960,7 @@ qemuDomainBlocksStatsGather(virQEMUDriverPtr driver, virDomainDiskDefPtr disk; virHashTablePtr blockstats =3D NULL; qemuBlockStatsPtr stats; + qemuMonitorPtr mon; int nstats; char *diskAlias =3D NULL; int ret =3D -1; @@ -10965,9 +10981,9 @@ qemuDomainBlocksStatsGather(virQEMUDriverPtr driver, goto cleanup; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); nstats =3D qemuMonitorGetAllBlockStatsInfo(priv->mon, &blockstats, fal= se); - if (qemuDomainObjExitMonitor(driver, vm) < 0 || nstats < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || nstats < 0) goto cleanup; =20 if (VIR_ALLOC(*retstats) < 0) @@ -11499,6 +11515,7 @@ qemuDomainMemoryStatsInternal(virQEMUDriverPtr driv= er, { int ret =3D -1; long rss; + qemuMonitorPtr mon; =20 if (!virDomainObjIsActive(vm)) { virReportError(VIR_ERR_OPERATION_INVALID, @@ -11508,10 +11525,10 @@ qemuDomainMemoryStatsInternal(virQEMUDriverPtr dr= iver, =20 if (vm->def->memballoon && vm->def->memballoon->model =3D=3D VIR_DOMAIN_MEMBALLOON_MODEL_VIRT= IO) { - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorGetMemoryStats(qemuDomainGetMonitor(vm), vm->def->memballoon, stats, nr_sta= ts); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 if (ret < 0 || ret >=3D nr_stats) @@ -11634,6 +11651,7 @@ qemuDomainMemoryPeek(virDomainPtr dom, int fd =3D -1, ret =3D -1; qemuDomainObjPrivatePtr priv; virQEMUDriverConfigPtr cfg =3D NULL; + qemuMonitorPtr mon; =20 virCheckFlags(VIR_MEMORY_VIRTUAL | VIR_MEMORY_PHYSICAL, -1); =20 @@ -11673,19 +11691,19 @@ qemuDomainMemoryPeek(virDomainPtr dom, qemuSecuritySetSavedStateLabel(driver->securityManager, vm->def, tmp); =20 priv =3D vm->privateData; - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (flags =3D=3D VIR_MEMORY_VIRTUAL) { if (qemuMonitorSaveVirtualMemory(priv->mon, offset, size, tmp) < 0= ) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto endjob; } } else { if (qemuMonitorSavePhysicalMemory(priv->mon, offset, size, tmp) < = 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto endjob; } } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto endjob; =20 /* Read the memory file into buffer. */ @@ -11898,6 +11916,7 @@ qemuDomainGetBlockInfo(virDomainPtr dom, virHashTablePtr stats =3D NULL; qemuBlockStats *entry; char *alias =3D NULL; + qemuMonitorPtr mon; =20 virCheckFlags(0, -1); =20 @@ -11945,14 +11964,14 @@ qemuDomainGetBlockInfo(virDomainPtr dom, goto endjob; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorGetAllBlockStatsInfo(qemuDomainGetMonitor(vm), &stats, false); if (rc >=3D 0) rc =3D qemuMonitorBlockStatsUpdateCapacity(qemuDomainGetMonitor(vm= ), stats, false); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || rc < 0) goto endjob; =20 if (!(entry =3D virHashLookup(stats, alias))) { @@ -13239,13 +13258,14 @@ qemuDomainGetJobInfoDumpStats(virQEMUDriverPtr dr= iver, qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuMonitorDumpStats stats =3D { 0 }; int rc; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, QEMU_ASYNC_JOB_NONE) < = 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, QEMU_ASYNC_JOB_NONE, &m= on) < 0) return -1; =20 rc =3D qemuMonitorQueryDump(priv->mon, &stats); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || rc < 0) return -1; =20 jobInfo->stats.dump =3D stats; @@ -13431,6 +13451,7 @@ static int qemuDomainAbortJob(virDomainPtr dom) virDomainObjPtr vm; int ret =3D -1; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; int reason; =20 if (!(vm =3D qemuDomObjFromDomain(dom))) @@ -13474,9 +13495,9 @@ static int qemuDomainAbortJob(virDomainPtr dom) =20 VIR_DEBUG("Cancelling job at client request"); qemuDomainObjAbortAsyncJob(vm); - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorMigrateCancel(priv->mon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -13496,6 +13517,7 @@ qemuDomainMigrateSetMaxDowntime(virDomainPtr dom, virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; int ret =3D -1; =20 virCheckFlags(0, -1); @@ -13518,9 +13540,9 @@ qemuDomainMigrateSetMaxDowntime(virDomainPtr dom, priv =3D vm->privateData; =20 VIR_DEBUG("Setting migration downtime to %llums", downtime); - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorSetMigrationDowntime(priv->mon, downtime); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -13540,6 +13562,7 @@ qemuDomainMigrateGetMaxDowntime(virDomainPtr dom, virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; qemuMonitorMigrationParams migparams =3D { 0 }; int ret =3D -1; =20 @@ -13561,7 +13584,7 @@ qemuDomainMigrateGetMaxDowntime(virDomainPtr dom, } =20 priv =3D vm->privateData; - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 if (qemuMonitorGetMigrationParams(priv->mon, &migparams) =3D=3D 0) { if (migparams.downtimeLimit_set) { @@ -13574,7 +13597,7 @@ qemuDomainMigrateGetMaxDowntime(virDomainPtr dom, } } =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -13594,6 +13617,7 @@ qemuDomainMigrateGetCompressionCache(virDomainPtr d= om, virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; int ret =3D -1; =20 virCheckFlags(0, -1); @@ -13622,11 +13646,11 @@ qemuDomainMigrateGetCompressionCache(virDomainPtr= dom, goto endjob; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 ret =3D qemuMonitorGetMigrationCacheSize(priv->mon, cacheSize); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -13645,6 +13669,7 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr d= om, virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; int ret =3D -1; =20 virCheckFlags(0, -1); @@ -13673,12 +13698,12 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr= dom, goto endjob; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 VIR_DEBUG("Setting compression cache to %llu B", cacheSize); ret =3D qemuMonitorSetMigrationCacheSize(priv->mon, cacheSize); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -13697,6 +13722,7 @@ qemuDomainMigrateSetMaxSpeed(virDomainPtr dom, virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; int ret =3D -1; =20 virCheckFlags(0, -1); @@ -13727,9 +13753,9 @@ qemuDomainMigrateSetMaxSpeed(virDomainPtr dom, } =20 VIR_DEBUG("Setting migration bandwidth to %luMbs", bandwidth); - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorSetMigrationSpeed(priv->mon, bandwidth); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 if (ret =3D=3D 0) @@ -13782,6 +13808,7 @@ qemuDomainMigrateStartPostCopy(virDomainPtr dom, virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; int ret =3D -1; =20 virCheckFlags(0, -1); @@ -13818,9 +13845,9 @@ qemuDomainMigrateStartPostCopy(virDomainPtr dom, } =20 VIR_DEBUG("Starting post-copy"); - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorMigrateStartPostCopy(priv->mon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -14018,6 +14045,7 @@ qemuDomainSnapshotCreateActiveInternal(virConnectPt= r conn, virObjectEventPtr event =3D NULL; bool resume =3D false; int ret =3D -1; + qemuMonitorPtr mon; =20 if (!qemuMigrationIsAllowed(driver, vm, false, 0)) goto cleanup; @@ -14040,13 +14068,13 @@ qemuDomainSnapshotCreateActiveInternal(virConnect= Ptr conn, } =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, - QEMU_ASYNC_JOB_SNAPSHOT) < 0) { + QEMU_ASYNC_JOB_SNAPSHOT, &mon) < 0)= { resume =3D false; goto cleanup; } =20 ret =3D qemuMonitorCreateSnapshot(priv->mon, snap->def->name); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; if (ret < 0) goto cleanup; @@ -14696,6 +14724,7 @@ qemuDomainSnapshotCreateSingleDiskActive(virQEMUDri= verPtr driver, char *source =3D NULL; const char *formatStr =3D NULL; int ret =3D -1, rc; + qemuMonitorPtr mon; =20 if (!(device =3D qemuAliasFromDisk(dd->disk))) goto cleanup; @@ -14728,13 +14757,13 @@ qemuDomainSnapshotCreateSingleDiskActive(virQEMUD= riverPtr driver, * Otherwise the following monitor command only constructs the command. */ if (!actions && - qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; =20 ret =3D rc =3D qemuMonitorDiskSnapshot(priv->mon, actions, device, sou= rce, formatStr, reuse); if (!actions) { - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; } =20 @@ -14765,6 +14794,7 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr= driver, virQEMUDriverConfigPtr cfg =3D NULL; qemuDomainSnapshotDiskDataPtr diskdata =3D NULL; virErrorPtr orig_err =3D NULL; + qemuMonitorPtr mon; =20 if (!virDomainObjIsActive(vm)) { virReportError(VIR_ERR_OPERATION_INVALID, @@ -14812,12 +14842,12 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverP= tr driver, } =20 if (actions && do_transaction) { - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; =20 ret =3D qemuMonitorTransaction(priv->mon, actions); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || ret < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || ret < 0) { ret =3D -1; goto error; } @@ -15755,6 +15785,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr sna= pshot, bool was_stopped =3D false; qemuDomainSaveCookiePtr cookie; virCPUDefPtr origCPU =3D NULL; + qemuMonitorPtr mon; =20 virCheckFlags(VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING | VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED | @@ -15942,10 +15973,10 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr s= napshot, } =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, - QEMU_ASYNC_JOB_START) < 0) + QEMU_ASYNC_JOB_START, &mon)= < 0) goto endjob; rc =3D qemuMonitorLoadSnapshot(priv->mon, snap->def->name); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto endjob; if (rc < 0) { /* XXX resume domain if it was running before the @@ -16307,6 +16338,7 @@ static int qemuDomainQemuMonitorCommand(virDomainPt= r domain, const char *cmd, virDomainObjPtr vm =3D NULL; int ret =3D -1; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; bool hmp; =20 virCheckFlags(VIR_DOMAIN_QEMU_MONITOR_COMMAND_HMP, -1); @@ -16332,9 +16364,9 @@ static int qemuDomainQemuMonitorCommand(virDomainPt= r domain, const char *cmd, =20 hmp =3D !!(flags & VIR_DOMAIN_QEMU_MONITOR_COMMAND_HMP); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorArbitraryCommand(priv->mon, cmd, result, hmp); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -16608,6 +16640,7 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver, qemuMonitorBlockJobInfo info; virStorageSourcePtr oldsrc =3D NULL; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + qemuMonitorPtr mon; =20 if (!disk->mirror) { virReportError(VIR_ERR_OPERATION_INVALID, @@ -16618,9 +16651,9 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver, =20 /* Probe the status, if needed. */ if (!disk->mirrorState) { - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorGetBlockJobInfo(priv->mon, disk->info.alias, &in= fo); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; if (rc < 0) goto cleanup; @@ -16687,9 +16720,9 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver, * that pivot failed, we need to reflect that failure into the * overall return value. */ disk->mirrorState =3D VIR_DOMAIN_DISK_MIRROR_STATE_PIVOT; - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorDrivePivot(priv->mon, device); - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { ret =3D -1; goto cleanup; } @@ -16729,6 +16762,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver, char *backingPath =3D NULL; unsigned long long speed =3D bandwidth; int ret =3D -1; + qemuMonitorPtr mon; =20 if (flags & VIR_DOMAIN_BLOCK_REBASE_RELATIVE && !base) { virReportError(VIR_ERR_INVALID_ARG, "%s", @@ -16797,14 +16831,14 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver, speed <<=3D 20; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (baseSource) basePath =3D qemuMonitorDiskNameLookup(priv->mon, device, disk->sr= c, baseSource); if (!baseSource || basePath) ret =3D qemuMonitorBlockStream(priv->mon, device, basePath, backin= gPath, speed); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 if (ret < 0) @@ -16843,6 +16877,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom, bool async =3D !!(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC); virDomainObjPtr vm; int ret =3D -1; + qemuMonitorPtr mon; =20 virCheckFlags(VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC | VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT, -1); @@ -16891,9 +16926,9 @@ qemuDomainBlockJobAbort(virDomainPtr dom, save =3D true; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorBlockJobCancel(qemuDomainGetMonitor(vm), device= ); - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { ret =3D -1; goto endjob; } @@ -16994,6 +17029,7 @@ qemuDomainGetBlockJobInfo(virDomainPtr dom, virDomainDiskDefPtr disk; int ret =3D -1; qemuMonitorBlockJobInfo rawInfo; + qemuMonitorPtr mon; =20 virCheckFlags(VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES, -1); =20 @@ -17022,10 +17058,10 @@ qemuDomainGetBlockJobInfo(virDomainPtr dom, goto endjob; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorGetBlockJobInfo(qemuDomainGetMonitor(vm), disk->info.alias, &rawInfo); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; if (ret <=3D 0) goto endjob; @@ -17071,6 +17107,7 @@ qemuDomainBlockJobSetSpeed(virDomainPtr dom, virDomainObjPtr vm; const char *device; unsigned long long speed =3D bandwidth; + qemuMonitorPtr mon; =20 virCheckFlags(VIR_DOMAIN_BLOCK_JOB_SPEED_BANDWIDTH_BYTES, -1); =20 @@ -17109,11 +17146,11 @@ qemuDomainBlockJobSetSpeed(virDomainPtr dom, if (!(device =3D qemuAliasFromDisk(disk))) goto endjob; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorBlockJobSetSpeed(qemuDomainGetMonitor(vm), device, speed); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -17206,6 +17243,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, const char *format =3D NULL; virErrorPtr monitor_error =3D NULL; bool reuse =3D !!(flags & VIR_DOMAIN_BLOCK_COPY_REUSE_EXT); + qemuMonitorPtr mon; =20 /* Preliminaries: find the disk we are editing, sanity checks */ virCheckFlags(VIR_DOMAIN_BLOCK_COPY_SHALLOW | @@ -17325,13 +17363,13 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, } =20 /* Actually start the mirroring */ - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); /* qemuMonitorDriveMirror needs to honor the REUSE_EXT flag as specifi= ed * by the user regardless of how @reuse was modified */ ret =3D qemuMonitorDriveMirror(priv->mon, device, mirror->path, format, bandwidth, granularity, buf_size, flags); virDomainAuditDisk(vm, NULL, mirror, "mirror", ret >=3D 0); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; if (ret < 0) { monitor_error =3D virSaveLastError(); @@ -17565,6 +17603,7 @@ qemuDomainBlockCommit(virDomainPtr dom, char *backingPath =3D NULL; virStorageSourcePtr mirror =3D NULL; unsigned long long speed =3D bandwidth; + qemuMonitorPtr mon; =20 /* XXX Add support for COMMIT_DELETE */ virCheckFlags(VIR_DOMAIN_BLOCK_COMMIT_SHALLOW | @@ -17728,7 +17767,7 @@ qemuDomainBlockCommit(virDomainPtr dom, disk->mirror =3D mirror; disk->mirrorJob =3D VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT; } - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); basePath =3D qemuMonitorDiskNameLookup(priv->mon, device, disk->src, baseSource); topPath =3D qemuMonitorDiskNameLookup(priv->mon, device, disk->src, @@ -17737,7 +17776,7 @@ qemuDomainBlockCommit(virDomainPtr dom, ret =3D qemuMonitorBlockCommit(priv->mon, device, topPath, basePath, backingPath, speed); - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { ret =3D -1; goto endjob; } @@ -17790,6 +17829,7 @@ qemuDomainOpenGraphics(virDomainPtr dom, virDomainObjPtr vm =3D NULL; int ret =3D -1; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; const char *protocol; =20 virCheckFlags(VIR_DOMAIN_OPEN_GRAPHICS_SKIPAUTH, -1); @@ -17833,10 +17873,10 @@ qemuDomainOpenGraphics(virDomainPtr dom, if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, fd) = < 0) goto endjob; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorOpenGraphics(priv->mon, protocol, fd, "graphicsfd", (flags & VIR_DOMAIN_OPEN_GRAPHICS_SKIPAU= TH) !=3D 0); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -17856,6 +17896,7 @@ qemuDomainOpenGraphicsFD(virDomainPtr dom, virDomainObjPtr vm =3D NULL; int ret =3D -1; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; const char *protocol; int pair[2] =3D {-1, -1}; =20 @@ -17905,10 +17946,10 @@ qemuDomainOpenGraphicsFD(virDomainPtr dom, =20 if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) goto cleanup; - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorOpenGraphics(priv->mon, protocol, pair[1], "graphic= sfd", (flags & VIR_DOMAIN_OPEN_GRAPHICS_SKIPAU= TH)); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; qemuDomainObjEndJob(driver, vm); if (ret < 0) @@ -18023,6 +18064,7 @@ qemuDomainSetBlockIoTune(virDomainPtr dom, virTypedParameterPtr eventParams =3D NULL; int eventNparams =3D 0; int eventMaxparams =3D 0; + qemuMonitorPtr mon; =20 virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1); @@ -18287,12 +18329,12 @@ qemuDomainSetBlockIoTune(virDomainPtr dom, /* NB: Let's let QEMU decide how to handle issues with _length * via the JSON error code from the block_set_io_throttle call */ =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorSetBlockIoThrottle(priv->mon, device, &info, supportMaxOptions, set_fields & QEMU_BLOCK_IOTUNE= _SET_GROUP_NAME, supportMaxLengthOptions); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; if (ret < 0) goto endjob; @@ -18360,6 +18402,7 @@ qemuDomainGetBlockIoTune(virDomainPtr dom, virDomainDefPtr def =3D NULL; virDomainDefPtr persistentDef =3D NULL; virDomainBlockIoTuneInfo reply =3D {0}; + qemuMonitorPtr mon; char *device =3D NULL; int ret =3D -1; int maxparams; @@ -18423,9 +18466,9 @@ qemuDomainGetBlockIoTune(virDomainPtr dom, =20 if (!(device =3D qemuAliasFromDisk(disk))) goto endjob; - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorGetBlockIoThrottle(priv->mon, device, &reply); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto endjob; if (ret < 0) goto endjob; @@ -18514,6 +18557,7 @@ qemuDomainGetDiskErrors(virDomainPtr dom, virDomainObjPtr vm =3D NULL; qemuDomainObjPrivatePtr priv; virHashTablePtr table =3D NULL; + qemuMonitorPtr mon; int ret =3D -1; size_t i; int n =3D 0; @@ -18542,9 +18586,9 @@ qemuDomainGetDiskErrors(virDomainPtr dom, goto endjob; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); table =3D qemuMonitorGetBlockInfo(priv->mon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto endjob; if (!table) goto endjob; @@ -18799,6 +18843,7 @@ qemuDomainPMWakeup(virDomainPtr dom, virDomainObjPtr vm; int ret =3D -1; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; =20 virCheckFlags(0, -1); =20 @@ -18826,9 +18871,9 @@ qemuDomainPMWakeup(virDomainPtr dom, goto endjob; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorSystemWakeup(priv->mon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 endjob: @@ -19206,6 +19251,7 @@ qemuDomainSetTime(virDomainPtr dom, qemuDomainObjPrivatePtr priv; virDomainObjPtr vm; qemuAgentPtr agent; + qemuMonitorPtr mon; bool rtcSync =3D flags & VIR_DOMAIN_TIME_SYNC; int ret =3D -1; int rv; @@ -19259,9 +19305,9 @@ qemuDomainSetTime(virDomainPtr dom, =20 /* Don't try to call rtc-reset-reinjection if it's not available */ if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_RTC_RESET_REINJECTION)) { - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rv =3D qemuMonitorRTCResetReinjection(priv->mon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto endjob; =20 if (rv < 0) @@ -20062,6 +20108,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver, virHashTablePtr stats =3D NULL; virHashTablePtr nodestats =3D NULL; virJSONValuePtr nodedata =3D NULL; + qemuMonitorPtr mon; qemuDomainObjPrivatePtr priv =3D dom->privateData; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); bool fetchnodedata =3D virQEMUCapsGet(priv->qemuCaps, @@ -20071,7 +20118,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver, bool visitBacking =3D !!(privflags & QEMU_DOMAIN_STATS_BACKING); =20 if (HAVE_JOB(privflags) && virDomainObjIsActive(dom)) { - qemuDomainObjEnterMonitor(driver, dom); + mon =3D qemuDomainObjEnterMonitor(driver, dom); rc =3D qemuMonitorGetAllBlockStatsInfo(priv->mon, &stats, visitBacking); if (rc >=3D 0) @@ -20081,7 +20128,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver, if (fetchnodedata) nodedata =3D qemuMonitorQueryNamedBlockNodes(priv->mon); =20 - if (qemuDomainObjExitMonitor(driver, dom) < 0) + if (qemuDomainObjExitMonitor(driver, dom, mon) < 0) goto cleanup; =20 /* failure to retrieve stats is fine at this point */ @@ -21096,6 +21143,7 @@ qemuDomainSetBlockThreshold(virDomainPtr dom, qemuDomainObjPrivatePtr priv; virDomainObjPtr vm =3D NULL; virStorageSourcePtr src; + qemuMonitorPtr mon; char *nodename =3D NULL; int rc; int ret =3D -1; @@ -21142,9 +21190,9 @@ qemuDomainSetBlockThreshold(virDomainPtr dom, if (VIR_STRDUP(nodename, src->nodestorage) < 0) goto endjob; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorSetBlockThreshold(priv->mon, nodename, threshold); - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || rc < 0) goto endjob; =20 ret =3D 0; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c old mode 100644 new mode 100755 index 53bfe47..6f436e0 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -203,6 +203,7 @@ qemuHotplugWaitForTrayEject(virQEMUDriverPtr driver, { unsigned long long now; int rc; + qemuMonitorPtr mon; =20 if (virTimeMillisNow(&now) < 0) return -1; @@ -223,9 +224,9 @@ qemuHotplugWaitForTrayEject(virQEMUDriverPtr driver, } =20 /* re-issue ejection command to pop out the media */ - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorEjectMedia(qemuDomainGetMonitor(vm), driveAlias, fal= se); - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || rc < 0) return -1; =20 return 0; @@ -260,6 +261,7 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); qemuDomainStorageSourcePrivatePtr srcPriv =3D QEMU_DOMAIN_STORAGE_SOUR= CE_PRIVATE(disk->src); qemuDomainSecretInfoPtr secinfo =3D NULL; + qemuMonitorPtr mon; const char *format =3D NULL; char *sourcestr =3D NULL; =20 @@ -286,9 +288,9 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, if (!(driveAlias =3D qemuAliasFromDisk(disk))) goto error; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorEjectMedia(priv->mon, driveAlias, force); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 /* If the tray is present and tray change event is supported wait for = it to open. */ @@ -315,12 +317,12 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr drive= r, format =3D virStorageFileFormatTypeToString(disk->src-= >format); } } - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorChangeMedia(priv->mon, driveAlias, sourcestr, format); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; } =20 @@ -377,6 +379,7 @@ qemuDomainAttachDiskGeneric(virConnectPtr conn, qemuDomainStorageSourcePrivatePtr srcPriv; qemuDomainSecretInfoPtr secinfo =3D NULL; qemuDomainSecretInfoPtr encinfo =3D NULL; + qemuMonitorPtr mon; =20 if (qemuHotplugPrepareDiskAccess(driver, vm, disk, NULL, false) < 0) goto cleanup; @@ -418,7 +421,7 @@ qemuDomainAttachDiskGeneric(virConnectPtr conn, if (VIR_REALLOC_N(vm->def->disks, vm->def->ndisks+1) < 0) goto error; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 if (secobjProps) { rv =3D qemuMonitorAddObject(priv->mon, "secret", secinfo->s.aes.al= ias, @@ -445,7 +448,7 @@ qemuDomainAttachDiskGeneric(virConnectPtr conn, if (qemuMonitorAddDevice(priv->mon, devstr) < 0) goto exit_monitor; =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { ret =3D -2; goto error; } @@ -475,7 +478,7 @@ qemuDomainAttachDiskGeneric(virConnectPtr conn, ignore_value(qemuMonitorDelObject(priv->mon, secinfo->s.aes.alias)= ); if (encobjAdded) ignore_value(qemuMonitorDelObject(priv->mon, encinfo->s.aes.alias)= ); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -2; virErrorRestore(&orig_err); =20 @@ -523,6 +526,7 @@ int qemuDomainAttachControllerDevice(virQEMUDriverPtr d= river, virDomainDeviceDef dev =3D { VIR_DOMAIN_DEVICE_CONTROLLER, { .controller =3D controller } }; bool releaseaddr =3D false; + qemuMonitorPtr mon; =20 if (controller->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_SCSI) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, @@ -561,9 +565,9 @@ int qemuDomainAttachControllerDevice(virQEMUDriverPtr d= river, if (VIR_REALLOC_N(vm->def->controllers, vm->def->ncontrollers+1) < 0) goto cleanup; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorAddDevice(priv->mon, devstr); - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { releaseaddr =3D false; ret =3D -1; goto cleanup; @@ -846,6 +850,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, bool charDevPlugged =3D false; bool netdevPlugged =3D false; bool hostPlugged =3D false; + qemuMonitorPtr mon; =20 /* preallocate new slot for device */ if (VIR_REALLOC_N(vm->def->nets, vm->def->nnets + 1) < 0) @@ -1081,11 +1086,11 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, goto cleanup; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 if (actualType =3D=3D VIR_DOMAIN_NET_TYPE_VHOSTUSER) { if (qemuMonitorAttachCharDev(priv->mon, charDevAlias, net->data.vh= ostuser) < 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); virDomainAuditNet(vm, NULL, net, "attach", false); goto cleanup; } @@ -1096,7 +1101,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, if (qemuMonitorAddNetdev(priv->mon, netstr, tapfd, tapfdName, tapfdSize, vhostfd, vhostfdName, vhostfdSize) < 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); virDomainAuditNet(vm, NULL, net, "attach", false); goto try_remove; } @@ -1105,14 +1110,14 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, if (qemuMonitorAddHostNetwork(priv->mon, netstr, tapfd, tapfdName, tapfdSize, vhostfd, vhostfdName, vhostfdSize) <= 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); virDomainAuditNet(vm, NULL, net, "attach", false); goto try_remove; } hostPlugged =3D true; } =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 for (i =3D 0; i < tapfdSize; i++) @@ -1124,13 +1129,13 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, queueSize, priv->qemuCaps))) goto try_remove; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorAddDevice(priv->mon, nicstr) < 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); virDomainAuditNet(vm, NULL, net, "attach", false); goto try_remove; } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 /* set link state */ @@ -1139,11 +1144,11 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("device alias not found: cannot set link stat= e to down")); } else { - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) { if (qemuMonitorSetLink(priv->mon, net->info.alias, VIR_DOM= AIN_NET_INTERFACE_LINK_STATE_DOWN) < 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)= ); virDomainAuditNet(vm, NULL, net, "attach", false); goto try_remove; } @@ -1152,7 +1157,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, _("setting of link state not supported: Lin= k is up")); } =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; } /* link set to down */ @@ -1220,7 +1225,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) { char *netdev_name; if (virAsprintf(&netdev_name, "host%s", net->info.alias) >=3D = 0) { - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (charDevPlugged && qemuMonitorDetachCharDev(priv->mon, charDevAlias) < 0) VIR_WARN("Failed to remove associated chardev %s", cha= rDevAlias); @@ -1228,7 +1233,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, qemuMonitorRemoveNetdev(priv->mon, netdev_name) < 0) VIR_WARN("Failed to remove network backend for netdev = %s", netdev_name); - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); VIR_FREE(netdev_name); } } else { @@ -1237,12 +1242,12 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, } else { char *hostnet_name; if (virAsprintf(&hostnet_name, "host%s", net->info.alias) >=3D 0) { - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (hostPlugged && qemuMonitorRemoveHostNetwork(priv->mon, vlan, hostnet_name= ) < 0) VIR_WARN("Failed to remove network backend for vlan %d, ne= t %s", vlan, hostnet_name); - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); VIR_FREE(hostnet_name); } } @@ -1271,6 +1276,7 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver, int backend; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); unsigned int flags =3D 0; + qemuMonitorPtr mon; =20 if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs + 1) < 0) goto cleanup; @@ -1363,10 +1369,10 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driv= er, configfd_name, priv->qemuCaps= ))) goto error; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorAddDeviceWithFd(priv->mon, devstr, configfd, configfd_name); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto error; =20 virDomainAuditHostdev(vm, hostdev, "attach", ret =3D=3D 0); @@ -1416,13 +1422,14 @@ qemuDomainDelTLSObjects(virQEMUDriverPtr driver, { qemuDomainObjPrivatePtr priv =3D vm->privateData; virErrorPtr orig_err; + qemuMonitorPtr mon; =20 if (!tlsAlias && !secAlias) return; =20 virErrorPreserveLast(&orig_err); =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; =20 if (tlsAlias) @@ -1431,7 +1438,7 @@ qemuDomainDelTLSObjects(virQEMUDriverPtr driver, if (secAlias) ignore_value(qemuMonitorDelObject(priv->mon, secAlias)); =20 - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); =20 cleanup: virErrorRestore(&orig_err); @@ -1450,11 +1457,12 @@ qemuDomainAddTLSObjects(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; int rc; virErrorPtr orig_err; + qemuMonitorPtr mon; =20 if (!tlsAlias && !secAlias) return 0; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 if (secAlias) { @@ -1473,11 +1481,11 @@ qemuDomainAddTLSObjects(virQEMUDriverPtr driver, goto error; } =20 - return qemuDomainObjExitMonitor(driver, vm); + return qemuDomainObjExitMonitor(driver, vm, mon); =20 error: virErrorPreserveLast(&orig_err); - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); virErrorRestore(&orig_err); qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, tlsAlias); =20 @@ -1588,6 +1596,7 @@ qemuDomainDelChardevTLSObjects(virQEMUDriverPtr drive= r, qemuDomainObjPrivatePtr priv =3D vm->privateData; char *tlsAlias =3D NULL; char *secAlias =3D NULL; + qemuMonitorPtr mon; =20 if (dev->type !=3D VIR_DOMAIN_CHR_TYPE_TCP || dev->data.tcp.haveTLS !=3D VIR_TRISTATE_BOOL_YES) { @@ -1606,13 +1615,13 @@ qemuDomainDelChardevTLSObjects(virQEMUDriverPtr dri= ver, !(secAlias =3D qemuDomainGetSecretAESAlias(inAlias, false))) goto cleanup; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias)); if (secAlias) ignore_value(qemuMonitorDelObject(priv->mon, secAlias)); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 ret =3D 0; @@ -1640,6 +1649,7 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn, char *secAlias =3D NULL; bool need_release =3D false; virErrorPtr orig_err; + qemuMonitorPtr mon; =20 if (qemuAssignDeviceRedirdevAlias(def, redirdev, -1) < 0) goto cleanup; @@ -1662,7 +1672,7 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn, &tlsAlias, &secAlias) < 0) goto audit; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 if (qemuMonitorAttachCharDev(priv->mon, charAlias, @@ -1673,7 +1683,7 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn, if (qemuMonitorAddDevice(priv->mon, devstr) < 0) goto exit_monitor; =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto audit; =20 def->redirdevs[def->nredirdevs++] =3D redirdev; @@ -1694,7 +1704,7 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn, /* detach associated chardev on error */ if (chardevAdded) ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias)); - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); virErrorRestore(&orig_err); qemuDomainDelTLSObjects(driver, vm, QEMU_ASYNC_JOB_NONE, secAlias, tlsAlias); @@ -1882,6 +1892,7 @@ int qemuDomainAttachChrDevice(virConnectPtr conn, char *tlsAlias =3D NULL; char *secAlias =3D NULL; bool need_release =3D false; + qemuMonitorPtr mon; =20 if (chr->deviceType =3D=3D VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && qemuDomainPrepareChannel(chr, priv->channelTargetDir) < 0) @@ -1921,7 +1932,7 @@ int qemuDomainAttachChrDevice(virConnectPtr conn, &tlsAlias, &secAlias) < 0) goto audit; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 if (qemuMonitorAttachCharDev(priv->mon, charAlias, chr->source) < 0) goto exit_monitor; @@ -1930,7 +1941,7 @@ int qemuDomainAttachChrDevice(virConnectPtr conn, if (qemuMonitorAddDevice(priv->mon, devstr) < 0) goto exit_monitor; =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto audit; =20 qemuDomainChrInsertPreAlloced(vmdef, chr); @@ -1961,7 +1972,7 @@ int qemuDomainAttachChrDevice(virConnectPtr conn, /* detach associated chardev on error */ if (chardevAttached) qemuMonitorDetachCharDev(priv->mon, charAlias); - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); virErrorRestore(&orig_err); =20 qemuDomainDelTLSObjects(driver, vm, QEMU_ASYNC_JOB_NONE, @@ -1993,6 +2004,7 @@ qemuDomainAttachRNGDevice(virConnectPtr conn, const char *type; int ret =3D -1; int rv; + qemuMonitorPtr mon; =20 if (qemuAssignDeviceRNGAlias(vm->def, rng) < 0) goto cleanup; @@ -2033,7 +2045,7 @@ qemuDomainAttachRNGDevice(virConnectPtr conn, goto audit; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 if (rng->backend =3D=3D VIR_DOMAIN_RNG_BACKEND_EGD && qemuMonitorAttachCharDev(priv->mon, charAlias, @@ -2050,7 +2062,7 @@ qemuDomainAttachRNGDevice(virConnectPtr conn, if (qemuMonitorAddDevice(priv->mon, devstr) < 0) goto exit_monitor; =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { releaseaddr =3D false; goto cleanup; } @@ -2085,7 +2097,7 @@ qemuDomainAttachRNGDevice(virConnectPtr conn, ignore_value(qemuMonitorDelObject(priv->mon, objAlias)); if (rng->backend =3D=3D VIR_DOMAIN_RNG_BACKEND_EGD && chardevAdded) ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias)); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) releaseaddr =3D false; virErrorRestore(&orig_err); =20 @@ -2127,6 +2139,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, int id; int ret =3D -1; int rv; + qemuMonitorPtr mon; =20 qemuDomainMemoryDeviceAlignSize(vm->def, mem); =20 @@ -2172,7 +2185,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, if (qemuDomainAdjustMaxMemLock(vm) < 0) goto removedef; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rv =3D qemuMonitorAddObject(priv->mon, backendType, objalias, props); props =3D NULL; /* qemuMonitorAddObject consumes */ if (rv < 0) @@ -2182,7 +2195,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, if (qemuMonitorAddDevice(priv->mon, devstr) < 0) goto exit_monitor; =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { /* we shouldn't touch mem now, as the def might be freed */ mem =3D NULL; goto audit; @@ -2227,7 +2240,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, virErrorPreserveLast(&orig_err); if (objAdded) ignore_value(qemuMonitorDelObject(priv->mon, objalias)); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) mem =3D NULL; virErrorRestore(&orig_err); if (!mem) @@ -2261,6 +2274,7 @@ qemuDomainAttachHostUSBDevice(virQEMUDriverPtr driver, bool teardownlabel =3D false; bool teardowndevice =3D false; int ret =3D -1; + qemuMonitorPtr mon; =20 if (priv->usbaddrs) { if (virDomainUSBAddressEnsure(priv->usbaddrs, hostdev->info) < 0) @@ -2293,9 +2307,9 @@ qemuDomainAttachHostUSBDevice(virQEMUDriverPtr driver, if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs+1) < 0) goto cleanup; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorAddDevice(priv->mon, devstr); - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { ret =3D -1; goto cleanup; } @@ -2348,6 +2362,7 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, virJSONValuePtr secobjProps =3D NULL; virDomainHostdevSubsysSCSIPtr scsisrc =3D &hostdev->source.subsys.u.sc= si; qemuDomainSecretInfoPtr secinfo =3D NULL; + qemuMonitorPtr mon; =20 if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE_SCSI_GENERIC)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -2411,7 +2426,7 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs + 1) < 0) goto cleanup; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 if (secobjProps) { rv =3D qemuMonitorAddObject(priv->mon, "secret", secinfo->s.aes.al= ias, @@ -2429,7 +2444,7 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, if (qemuMonitorAddDevice(priv->mon, devstr) < 0) goto exit_monitor; =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 virDomainAuditHostdev(vm, hostdev, "attach", true); @@ -2466,7 +2481,7 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, } if (secobjAdded) ignore_value(qemuMonitorDelObject(priv->mon, secinfo->s.aes.alias)= ); - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); virErrorRestore(&orig_err); =20 virDomainAuditHostdev(vm, hostdev, "attach", false); @@ -2491,6 +2506,7 @@ qemuDomainAttachSCSIVHostDevice(virQEMUDriverPtr driv= er, bool teardownlabel =3D false; bool teardowndevice =3D false; bool releaseaddr =3D false; + qemuMonitorPtr mon; =20 if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE_SCSI_GENERIC)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -2550,11 +2566,11 @@ qemuDomainAttachSCSIVHostDevice(virQEMUDriverPtr dr= iver, if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs + 1) < 0) goto cleanup; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 ret =3D qemuMonitorAddDeviceWithFd(priv->mon, devstr, vhostfd, vhostfd= Name); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || ret < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || ret < 0) goto audit; =20 vm->def->hostdevs[vm->def->nhostdevs++] =3D hostdev; @@ -2652,6 +2668,7 @@ qemuDomainAttachShmemDevice(virQEMUDriverPtr driver, virJSONValuePtr props =3D NULL; qemuDomainObjPrivatePtr priv =3D vm->privateData; virDomainDeviceDef dev =3D { VIR_DOMAIN_DEVICE_SHMEM, { .shmem =3D shm= em } }; + qemuMonitorPtr mon; =20 switch ((virDomainShmemModel)shmem->model) { case VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_PLAIN: @@ -2695,7 +2712,7 @@ qemuDomainAttachShmemDevice(virQEMUDriverPtr driver, goto cleanup; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 if (shmem->server.enabled) { if (qemuMonitorAttachCharDev(priv->mon, charAlias, @@ -2715,7 +2732,7 @@ qemuDomainAttachShmemDevice(virQEMUDriverPtr driver, if (qemuMonitorAddDevice(priv->mon, shmstr) < 0) goto exit_monitor; =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { release_address =3D false; goto cleanup; } @@ -2750,7 +2767,7 @@ qemuDomainAttachShmemDevice(virQEMUDriverPtr driver, ignore_value(qemuMonitorDelObject(priv->mon, memAlias)); } =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) release_address =3D false; =20 virErrorRestore(&orig_err); @@ -2772,6 +2789,7 @@ qemuDomainAttachWatchdog(virQEMUDriverPtr driver, char *watchdogstr =3D NULL; bool releaseAddress =3D false; int rv; + qemuMonitorPtr mon; =20 if (vm->def->watchdog) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", @@ -2804,14 +2822,14 @@ qemuDomainAttachWatchdog(virQEMUDriverPtr driver, =20 actionStr =3D virDomainWatchdogActionTypeToString(actualAction); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 rv =3D qemuMonitorSetWatchdogAction(priv->mon, actionStr); =20 if (rv >=3D 0) rv =3D qemuMonitorAddDevice(priv->mon, watchdogstr); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { releaseAddress =3D false; goto cleanup; } @@ -2846,6 +2864,7 @@ qemuDomainAttachInputDevice(virQEMUDriverPtr driver, bool teardowndevice =3D false; bool teardownlabel =3D false; bool teardowncgroup =3D false; + qemuMonitorPtr mon; =20 if (input->bus !=3D VIR_DOMAIN_INPUT_BUS_USB && input->bus !=3D VIR_DOMAIN_INPUT_BUS_VIRTIO) { @@ -2887,11 +2906,11 @@ qemuDomainAttachInputDevice(virQEMUDriverPtr driver, if (VIR_REALLOC_N(vm->def->inputs, vm->def->ninputs + 1) < 0) goto cleanup; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorAddDevice(priv->mon, devstr) < 0) goto exit_monitor; =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { releaseaddr =3D false; goto cleanup; } @@ -2921,7 +2940,7 @@ qemuDomainAttachInputDevice(virQEMUDriverPtr driver, return ret; =20 exit_monitor: - if (qemuDomainObjExitMonitor(driver, vm) < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) { releaseaddr =3D false; goto cleanup; } @@ -3026,6 +3045,7 @@ int qemuDomainChangeNetLinkState(virQEMUDriverPtr dri= ver, { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMonitorPtr mon; =20 if (!dev->info.alias) { virReportError(VIR_ERR_OPERATION_FAILED, "%s", @@ -3035,7 +3055,7 @@ int qemuDomainChangeNetLinkState(virQEMUDriverPtr dri= ver, =20 VIR_DEBUG("dev: %s, state: %d", dev->info.alias, linkstate); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 ret =3D qemuMonitorSetLink(priv->mon, dev->info.alias, linkstate); if (ret < 0) @@ -3045,7 +3065,7 @@ int qemuDomainChangeNetLinkState(virQEMUDriverPtr dri= ver, dev->linkstate =3D linkstate; =20 cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) return -1; =20 return ret; @@ -3733,6 +3753,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, char *drivestr; char *objAlias =3D NULL; char *encAlias =3D NULL; + qemuMonitorPtr mon; =20 VIR_DEBUG("Removing disk %s from domain %p %s", disk->info.alias, vm, vm->def->name); @@ -3770,7 +3791,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, } } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 qemuMonitorDriveDel(priv->mon, drivestr); VIR_FREE(drivestr); @@ -3788,7 +3809,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, if (disk->src->haveTLS) ignore_value(qemuMonitorDelObject(priv->mon, disk->src->tlsAlias)); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) return -1; =20 virDomainAuditDisk(vm, disk->src, NULL, "detach", true); @@ -3867,6 +3888,7 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver, char *backendAlias =3D NULL; int rc; int idx; + qemuMonitorPtr mon; =20 VIR_DEBUG("Removing memory device %s from domain %p %s", mem->info.alias, vm, vm->def->name); @@ -3874,9 +3896,9 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver, if (virAsprintf(&backendAlias, "mem%s", mem->info.alias) < 0) return -1; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorDelObject(priv->mon, backendAlias); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) rc =3D -1; =20 VIR_FREE(backendAlias); @@ -3963,6 +3985,7 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver, char *drivealias =3D NULL; char *objAlias =3D NULL; bool is_vfio =3D false; + qemuMonitorPtr mon; =20 VIR_DEBUG("Removing host device %s from domain %p %s", hostdev->info->alias, vm, vm->def->name); @@ -3989,14 +4012,14 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver, goto cleanup; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); qemuMonitorDriveDel(priv->mon, drivealias); =20 /* If it fails, then so be it - it was a best shot */ if (objAlias) ignore_value(qemuMonitorDelObject(priv->mon, objAlias)); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; } =20 @@ -4086,6 +4109,7 @@ qemuDomainRemoveNetDevice(virQEMUDriverPtr driver, size_t i; int ret =3D -1; int actualType =3D virDomainNetGetActualType(net); + qemuMonitorPtr mon; =20 if (actualType =3D=3D VIR_DOMAIN_NET_TYPE_HOSTDEV) { /* this function handles all hostdev and netdev cleanup */ @@ -4102,10 +4126,10 @@ qemuDomainRemoveNetDevice(virQEMUDriverPtr driver, goto cleanup; =20 =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) { if (qemuMonitorRemoveNetdev(priv->mon, hostnet_name) < 0) { - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; virDomainAuditNet(vm, net, NULL, "detach", false); goto cleanup; @@ -4118,7 +4142,7 @@ qemuDomainRemoveNetDevice(virQEMUDriverPtr driver, virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("unable to determine original VLAN")); } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; virDomainAuditNet(vm, net, NULL, "detach", false); goto cleanup; @@ -4135,7 +4159,7 @@ qemuDomainRemoveNetDevice(virQEMUDriverPtr driver, } } =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 virDomainAuditNet(vm, net, NULL, "detach", true); @@ -4192,6 +4216,7 @@ qemuDomainRemoveChrDevice(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret =3D -1; int rc; + qemuMonitorPtr mon; =20 VIR_DEBUG("Removing character device %s from domain %p %s", chr->info.alias, vm, vm->def->name); @@ -4199,10 +4224,10 @@ qemuDomainRemoveChrDevice(virQEMUDriverPtr driver, if (!(charAlias =3D qemuAliasChardevFromDevAlias(chr->info.alias))) goto cleanup; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorDetachCharDev(priv->mon, charAlias); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if (rc =3D=3D 0 && @@ -4248,6 +4273,7 @@ qemuDomainRemoveRNGDevice(virQEMUDriverPtr driver, ssize_t idx; int ret =3D -1; int rc; + qemuMonitorPtr mon; =20 VIR_DEBUG("Removing RNG device %s from domain %p %s", rng->info.alias, vm, vm->def->name); @@ -4259,11 +4285,11 @@ qemuDomainRemoveRNGDevice(virQEMUDriverPtr driver, if (!(charAlias =3D qemuAliasChardevFromDevAlias(rng->info.alias))) goto cleanup; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 rc =3D qemuMonitorDelObject(priv->mon, objAlias); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if (rng->backend =3D=3D VIR_DOMAIN_RNG_BACKEND_EGD && @@ -4311,6 +4337,7 @@ qemuDomainRemoveShmemDevice(virQEMUDriverPtr driver, char *memAlias =3D NULL; qemuDomainObjPrivatePtr priv =3D vm->privateData; virObjectEventPtr event =3D NULL; + qemuMonitorPtr mon; =20 VIR_DEBUG("Removing shmem device %s from domain %p %s", shmem->info.alias, vm, vm->def->name); @@ -4323,14 +4350,14 @@ qemuDomainRemoveShmemDevice(virQEMUDriverPtr driver, return -1; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 if (shmem->server.enabled) rc =3D qemuMonitorDetachCharDev(priv->mon, charAlias); else rc =3D qemuMonitorDelObject(priv->mon, memAlias); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 virDomainAuditShmem(vm, shmem, "detach", rc =3D=3D 0); @@ -4418,6 +4445,7 @@ qemuDomainRemoveRedirdevDevice(virQEMUDriverPtr drive= r, char *charAlias =3D NULL; ssize_t idx; int ret =3D -1; + qemuMonitorPtr mon; =20 VIR_DEBUG("Removing redirdev device %s from domain %p %s", dev->info.alias, vm, vm->def->name); @@ -4425,13 +4453,13 @@ qemuDomainRemoveRedirdevDevice(virQEMUDriverPtr dri= ver, if (!(charAlias =3D qemuAliasChardevFromDevAlias(dev->info.alias))) goto cleanup; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); /* DeviceDel from Detach may remove chardev, * so we cannot rely on return status to delete TLS chardevs. */ ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias)); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if (qemuDomainDelChardevTLSObjects(driver, vm, dev->source, charAlias)= < 0) @@ -4629,6 +4657,7 @@ qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr dri= ver, { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMonitorPtr mon; =20 if (qemuIsMultiFunctionDevice(vm->def, &detach->info)) { virReportError(VIR_ERR_OPERATION_FAILED, @@ -4644,14 +4673,14 @@ qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr d= river, =20 qemuDomainMarkDeviceForRemoval(vm, &detach->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; virDomainAuditDisk(vm, detach->src, NULL, "detach", false); goto cleanup; } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) @@ -4669,20 +4698,21 @@ qemuDomainDetachDiskDevice(virQEMUDriverPtr driver, { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMonitorPtr mon; =20 if (qemuDomainDiskBlockJobIsActive(detach)) goto cleanup; =20 qemuDomainMarkDeviceForRemoval(vm, &detach->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; virDomainAuditDisk(vm, detach->src, NULL, "detach", false); goto cleanup; } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) @@ -4812,6 +4842,7 @@ int qemuDomainDetachControllerDevice(virQEMUDriverPtr= driver, int idx, ret =3D -1; virDomainControllerDefPtr detach =3D NULL; qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMonitorPtr mon; =20 if ((idx =3D virDomainControllerFind(vm->def, dev->data.controller->type, @@ -4861,12 +4892,12 @@ int qemuDomainDetachControllerDevice(virQEMUDriverP= tr driver, =20 qemuDomainMarkDeviceForRemoval(vm, &detach->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, detach->info.alias)) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto cleanup; } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) @@ -4885,6 +4916,7 @@ qemuDomainDetachHostPCIDevice(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; virDomainHostdevSubsysPCIPtr pcisrc =3D &detach->source.subsys.u.pci; int ret; + qemuMonitorPtr mon; =20 if (qemuIsMultiFunctionDevice(vm->def, detach->info)) { virReportError(VIR_ERR_OPERATION_FAILED, @@ -4896,9 +4928,9 @@ qemuDomainDetachHostPCIDevice(virQEMUDriverPtr driver, =20 qemuDomainMarkDeviceForRemoval(vm, detach->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorDelDevice(priv->mon, detach->info->alias); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 return ret; @@ -4911,6 +4943,7 @@ qemuDomainDetachHostUSBDevice(virQEMUDriverPtr driver, { qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret; + qemuMonitorPtr mon; =20 if (!detach->info->alias) { virReportError(VIR_ERR_OPERATION_FAILED, @@ -4920,9 +4953,9 @@ qemuDomainDetachHostUSBDevice(virQEMUDriverPtr driver, =20 qemuDomainMarkDeviceForRemoval(vm, detach->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorDelDevice(priv->mon, detach->info->alias); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 return ret; @@ -4935,6 +4968,7 @@ qemuDomainDetachHostSCSIDevice(virQEMUDriverPtr drive= r, { qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret =3D -1; + qemuMonitorPtr mon; =20 if (!detach->info->alias) { virReportError(VIR_ERR_OPERATION_FAILED, @@ -4944,10 +4978,10 @@ qemuDomainDetachHostSCSIDevice(virQEMUDriverPtr dri= ver, =20 qemuDomainMarkDeviceForRemoval(vm, detach->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorDelDevice(priv->mon, detach->info->alias); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) return -1; =20 return ret; @@ -4960,6 +4994,7 @@ qemuDomainDetachSCSIVHostDevice(virQEMUDriverPtr driv= er, { qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret =3D -1; + qemuMonitorPtr mon; =20 if (!detach->info->alias) { virReportError(VIR_ERR_OPERATION_FAILED, @@ -4969,10 +5004,10 @@ qemuDomainDetachSCSIVHostDevice(virQEMUDriverPtr dr= iver, =20 qemuDomainMarkDeviceForRemoval(vm, detach->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorDelDevice(priv->mon, detach->info->alias); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) return -1; =20 return ret; @@ -5107,6 +5142,7 @@ qemuDomainDetachShmemDevice(virQEMUDriverPtr driver, ssize_t idx =3D -1; virDomainShmemDefPtr shmem =3D NULL; qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMonitorPtr mon; =20 if ((idx =3D virDomainShmemDefFind(vm->def, dev)) < 0) { virReportError(VIR_ERR_DEVICE_MISSING, @@ -5133,11 +5169,11 @@ qemuDomainDetachShmemDevice(virQEMUDriverPtr driver, } =20 qemuDomainMarkDeviceForRemoval(vm, &shmem->info); - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 ret =3D qemuMonitorDelDevice(priv->mon, shmem->info.alias); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 if (ret =3D=3D 0) { @@ -5160,6 +5196,7 @@ qemuDomainDetachWatchdog(virQEMUDriverPtr driver, int ret =3D -1; virDomainWatchdogDefPtr watchdog =3D vm->def->watchdog; qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMonitorPtr mon; =20 /* While domains can have up to one watchdog, the one supplied by the = user * doesn't necessarily match the one domain has. Refuse to detach in s= uch @@ -5183,11 +5220,11 @@ qemuDomainDetachWatchdog(virQEMUDriverPtr driver, } =20 qemuDomainMarkDeviceForRemoval(vm, &watchdog->info); - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 ret =3D qemuMonitorDelDevice(priv->mon, watchdog->info.alias); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 if (ret =3D=3D 0) { @@ -5211,6 +5248,7 @@ qemuDomainDetachRedirdevDevice(virQEMUDriverPtr drive= r, qemuDomainObjPrivatePtr priv =3D vm->privateData; virDomainRedirdevDefPtr tmpRedirdevDef; ssize_t idx; + qemuMonitorPtr mon; =20 if ((idx =3D virDomainRedirdevDefFind(vm->def, dev)) < 0) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", @@ -5228,12 +5266,12 @@ qemuDomainDetachRedirdevDevice(virQEMUDriverPtr dri= ver, =20 qemuDomainMarkDeviceForRemoval(vm, &tmpRedirdevDef->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, tmpRedirdevDef->info.alias) < 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto cleanup; } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) @@ -5253,6 +5291,7 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver, int detachidx, ret =3D -1; virDomainNetDefPtr detach =3D NULL; qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMonitorPtr mon; =20 if ((detachidx =3D virDomainNetFindIdx(vm->def, dev->data.net)) < 0) goto cleanup; @@ -5291,14 +5330,14 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver, =20 qemuDomainMarkDeviceForRemoval(vm, &detach->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; virDomainAuditNet(vm, detach, NULL, "detach", false); goto cleanup; } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) @@ -5325,6 +5364,7 @@ qemuDomainChangeGraphicsPasswords(virQEMUDriverPtr dr= iver, const char *password; int ret =3D -1; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + qemuMonitorPtr mon; =20 if (!auth->passwd && !defaultPasswd) { ret =3D 0; @@ -5335,7 +5375,7 @@ qemuDomainChangeGraphicsPasswords(virQEMUDriverPtr dr= iver, if (auth->connected) connected =3D virDomainGraphicsAuthConnectedTypeToString(auth->con= nected); =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; ret =3D qemuMonitorSetPassword(priv->mon, type, password, connected); =20 @@ -5376,7 +5416,7 @@ qemuDomainChangeGraphicsPasswords(virQEMUDriverPtr dr= iver, } =20 end_job: - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; cleanup: VIR_FREE(validTo); @@ -5439,6 +5479,7 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver, virDomainDefPtr vmdef =3D vm->def; virDomainChrDefPtr tmpChr; char *devstr =3D NULL; + qemuMonitorPtr mon; =20 if (!(tmpChr =3D virDomainChrFind(vmdef, chr))) { virReportError(VIR_ERR_DEVICE_MISSING, @@ -5458,12 +5499,12 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driv= er, =20 qemuDomainMarkDeviceForRemoval(vm, &tmpChr->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (devstr && qemuMonitorDelDevice(priv->mon, tmpChr->info.alias) < 0)= { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto cleanup; } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) { @@ -5488,6 +5529,7 @@ qemuDomainDetachRNGDevice(virQEMUDriverPtr driver, virDomainRNGDefPtr tmpRNG; int rc; int ret =3D -1; + qemuMonitorPtr mon; =20 if ((idx =3D virDomainRNGFind(vm->def, rng)) < 0) { virReportError(VIR_ERR_DEVICE_MISSING, @@ -5507,9 +5549,9 @@ qemuDomainDetachRNGDevice(virQEMUDriverPtr driver, =20 qemuDomainMarkDeviceForRemoval(vm, &tmpRNG->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorDelDevice(priv->mon, tmpRNG->info.alias); - if (qemuDomainObjExitMonitor(driver, vm) || rc < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) || rc < 0) goto cleanup; =20 if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) @@ -5531,6 +5573,7 @@ qemuDomainDetachMemoryDevice(virQEMUDriverPtr driver, int idx; int rc; int ret =3D -1; + qemuMonitorPtr mon; =20 qemuDomainMemoryDeviceAlignSize(vm->def, memdef); =20 @@ -5552,9 +5595,9 @@ qemuDomainDetachMemoryDevice(virQEMUDriverPtr driver, =20 qemuDomainMarkDeviceForRemoval(vm, &mem->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorDelDevice(priv->mon, mem->info.alias); - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || rc < 0) goto cleanup; =20 if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) @@ -5645,6 +5688,7 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, unsigned int nvcpus =3D vcpupriv->vcpus; int rc; int ret =3D -1; + qemuMonitorPtr mon; =20 if (!vcpupriv->alias) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, @@ -5654,11 +5698,11 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, =20 qemuDomainMarkDeviceAliasForRemoval(vm, vcpupriv->alias); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 rc =3D qemuMonitorDelDevice(qemuDomainGetMonitor(vm), vcpupriv->alias); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if (rc < 0) { @@ -5705,6 +5749,7 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver, int rc; int oldvcpus =3D virDomainDefGetVcpus(vm->def); size_t i; + qemuMonitorPtr mon; =20 if (newhotplug) { if (virAsprintf(&vcpupriv->alias, "vcpu%u", vcpu) < 0) @@ -5714,7 +5759,7 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver, goto cleanup; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 if (newhotplug) { rc =3D qemuMonitorAddDeviceArgs(qemuDomainGetMonitor(vm), vcpuprop= s); @@ -5723,7 +5768,7 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver, rc =3D qemuMonitorSetCPU(qemuDomainGetMonitor(vm), vcpu, true); } =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 virDomainAuditVcpu(vm, oldvcpus, oldvcpus + nvcpus, "update", rc =3D= =3D 0); @@ -6236,6 +6281,7 @@ qemuDomainDetachInputDevice(virDomainObjPtr vm, virDomainInputDefPtr input; int ret =3D -1; int idx; + qemuMonitorPtr mon; =20 if ((idx =3D virDomainInputDefFind(vm->def, def)) < 0) { virReportError(VIR_ERR_OPERATION_FAILED, "%s", @@ -6261,12 +6307,12 @@ qemuDomainDetachInputDevice(virDomainObjPtr vm, =20 qemuDomainMarkDeviceForRemoval(vm, &input->info); =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, input->info.alias)) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto cleanup; } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c old mode 100644 new mode 100755 index 5ee9e5c..9acff21 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -106,8 +106,9 @@ qemuMigrationCheckTLSCreds(virQEMUDriverPtr driver, int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 if (qemuMonitorGetMigrationParams(priv->mon, &migParams) < 0) @@ -119,7 +120,7 @@ qemuMigrationCheckTLSCreds(virQEMUDriverPtr driver, ret =3D 0; =20 cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 qemuMigrationParamsClear(&migParams); @@ -501,6 +502,7 @@ qemuMigrationStartNBDServer(virQEMUDriverPtr driver, unsigned short port =3D 0; char *diskAlias =3D NULL; size_t i; + qemuMonitorPtr mon; =20 if (nbdPort < 0 || nbdPort > USHRT_MAX) { virReportError(VIR_ERR_INVALID_ARG, "%s", @@ -527,7 +529,7 @@ qemuMigrationStartNBDServer(virQEMUDriverPtr driver, goto cleanup; =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, - QEMU_ASYNC_JOB_MIGRATION_IN) < = 0) + QEMU_ASYNC_JOB_MIGRATION_IN, &m= on) < 0) goto cleanup; =20 if (port =3D=3D 0) { @@ -542,7 +544,7 @@ qemuMigrationStartNBDServer(virQEMUDriverPtr driver, =20 if (qemuMonitorNBDServerAdd(priv->mon, diskAlias, true) < 0) goto exit_monitor; - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; } =20 @@ -556,7 +558,7 @@ qemuMigrationStartNBDServer(virQEMUDriverPtr driver, return ret; =20 exit_monitor: - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto cleanup; } =20 @@ -567,17 +569,18 @@ qemuMigrationStopNBDServer(virQEMUDriverPtr driver, qemuMigrationCookiePtr mig) { qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMonitorPtr mon; =20 if (!mig->nbd) return 0; =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, - QEMU_ASYNC_JOB_MIGRATION_IN) < 0) + QEMU_ASYNC_JOB_MIGRATION_IN, &mon) = < 0) return -1; =20 if (qemuMonitorNBDServerStop(priv->mon) < 0) VIR_WARN("Unable to stop NBD server"); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) return -1; =20 virPortAllocatorRelease(driver->migrationPorts, priv->nbdPort); @@ -756,6 +759,7 @@ qemuMigrationCancelOneDriveMirror(virQEMUDriverPtr driv= er, int ret =3D -1; int status; int rv; + qemuMonitorPtr mon; =20 status =3D qemuBlockJobUpdate(driver, vm, asyncJob, disk, &error); switch (status) { @@ -781,12 +785,12 @@ qemuMigrationCancelOneDriveMirror(virQEMUDriverPtr dr= iver, if (!(diskAlias =3D qemuAliasFromDisk(disk))) return -1; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; =20 rv =3D qemuMonitorBlockJobCancel(priv->mon, diskAlias); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rv < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || rv < 0) goto cleanup; =20 ret =3D 0; @@ -920,6 +924,7 @@ qemuMigrationDriveMirror(virQEMUDriverPtr driver, unsigned int mirror_flags =3D VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT; int rv; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + qemuMonitorPtr mon; =20 VIR_DEBUG("Starting drive mirrors for domain %s", vm->def->name); =20 @@ -961,7 +966,7 @@ qemuMigrationDriveMirror(virQEMUDriverPtr driver, goto cleanup; =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, - QEMU_ASYNC_JOB_MIGRATION_OUT) <= 0) + QEMU_ASYNC_JOB_MIGRATION_OUT, &= mon) < 0) goto cleanup; =20 qemuBlockJobSyncBegin(disk); @@ -971,7 +976,7 @@ qemuMigrationDriveMirror(virQEMUDriverPtr driver, VIR_FREE(diskAlias); VIR_FREE(nbd_dest); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || mon_ret < 0) { + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || mon_ret < 0) { qemuBlockJobSyncEnd(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, = disk); goto cleanup; } @@ -1296,6 +1301,7 @@ qemuMigrationSetOption(virQEMUDriverPtr driver, { qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret; + qemuMonitorPtr mon; =20 if (!qemuMigrationCapsGet(vm, capability)) { if (!state) { @@ -1317,12 +1323,12 @@ qemuMigrationSetOption(virQEMUDriverPtr driver, return -1; } =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, job) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, job, &mon) < 0) return -1; =20 ret =3D qemuMonitorSetMigrationCapability(priv->mon, capability, state= ); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 return ret; @@ -1416,13 +1422,14 @@ qemuMigrationFetchStats(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuMonitorMigrationStats stats; int rv; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 rv =3D qemuMonitorGetMigrationStats(priv->mon, &stats, error); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rv < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || rv < 0) return -1; =20 jobInfo->stats.mig =3D stats; @@ -1702,6 +1709,7 @@ qemuDomainMigrateGraphicsRelocate(virQEMUDriverPtr dr= iver, int port =3D -1; int tlsPort =3D -1; const char *tlsSubject =3D NULL; + qemuMonitorPtr mon; =20 if (!cookie || (!cookie->graphics && !graphicsuri)) return 0; @@ -1772,11 +1780,11 @@ qemuDomainMigrateGraphicsRelocate(virQEMUDriverPtr = driver, } =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, - QEMU_ASYNC_JOB_MIGRATION_OUT) =3D= =3D 0) { + QEMU_ASYNC_JOB_MIGRATION_OUT, &mon)= =3D=3D 0) { ret =3D qemuMonitorGraphicsRelocate(priv->mon, type, listenAddress, port, tlsPort, tlsSubject); priv->job.spiceMigration =3D !ret; - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; } =20 @@ -1872,15 +1880,16 @@ qemuMigrationRunIncoming(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret =3D -1; int rv; + qemuMonitorPtr mon; =20 VIR_DEBUG("Setting up incoming migration with URI %s", uri); =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 rv =3D qemuMonitorMigrateIncoming(priv->mon, uri); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rv < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || rv < 0) goto cleanup; =20 if (asyncJob =3D=3D QEMU_ASYNC_JOB_MIGRATION_IN) { @@ -2326,6 +2335,7 @@ qemuMigrationSetCompression(virQEMUDriverPtr driver, { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMonitorPtr mon; =20 if (qemuMigrationSetOption(driver, vm, QEMU_MONITOR_MIGRATION_CAPS_XBZRLE, @@ -2341,7 +2351,7 @@ qemuMigrationSetCompression(virQEMUDriverPtr driver, job) < 0) return -1; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, job) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, job, &mon) < 0) return -1; =20 migParams->compressLevel_set =3D compression->level_set; @@ -2361,7 +2371,7 @@ qemuMigrationSetCompression(virQEMUDriverPtr driver, ret =3D 0; =20 cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 return ret; @@ -2478,8 +2488,9 @@ qemuMigrationSetParams(virQEMUDriverPtr driver, { qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret =3D -1; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, job) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, job, &mon) < 0) return -1; =20 if (qemuMonitorSetMigrationParams(priv->mon, migParams) < 0) @@ -2488,7 +2499,7 @@ qemuMigrationSetParams(virQEMUDriverPtr driver, ret =3D 0; =20 cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 return ret; @@ -3644,13 +3655,14 @@ qemuMigrationContinue(virQEMUDriverPtr driver, { qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 ret =3D qemuMonitorMigrateContinue(priv->mon, status); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 return ret; @@ -3694,6 +3706,7 @@ qemuMigrationRun(virQEMUDriverPtr driver, virDomainDefPtr persistDef =3D NULL; char *timestamp; int rc; + qemuMonitorPtr mon; =20 VIR_DEBUG("driver=3D%p, vm=3D%p, cookiein=3D%s, cookieinlen=3D%d, " "cookieout=3D%p, cookieoutlen=3D%p, flags=3D0x%lx, resource= =3D%lu, " @@ -3836,7 +3849,7 @@ qemuMigrationRun(virQEMUDriverPtr driver, goto error; =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, - QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) + QEMU_ASYNC_JOB_MIGRATION_OUT, &mon)= < 0) goto error; =20 if (priv->job.abortJob) { @@ -3893,7 +3906,7 @@ qemuMigrationRun(virQEMUDriverPtr driver, break; } =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || rc < 0) goto error; =20 /* From this point onwards we *must* call cancel to abort the @@ -4026,9 +4039,9 @@ qemuMigrationRun(virQEMUDriverPtr driver, priv->job.current->status !=3D QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLET= ED && virDomainObjIsActive(vm) && qemuDomainObjEnterMonitorAsync(driver, vm, - QEMU_ASYNC_JOB_MIGRATION_OUT) =3D= =3D 0) { + QEMU_ASYNC_JOB_MIGRATION_OUT, &mon)= =3D=3D 0) { qemuMonitorMigrateCancel(priv->mon); - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); } =20 /* cancel any outstanding NBD jobs */ @@ -4046,7 +4059,7 @@ qemuMigrationRun(virQEMUDriverPtr driver, goto cleanup; =20 exit_monitor: - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto error; } =20 @@ -5550,14 +5563,15 @@ qemuMigrationToFile(virQEMUDriverPtr driver, virDom= ainObjPtr vm, unsigned long saveMigBandwidth =3D priv->migMaxBandwidth; char *errbuf =3D NULL; virErrorPtr orig_err =3D NULL; + qemuMonitorPtr mon; =20 /* Increase migration bandwidth to unlimited since target is a file. * Failure to change migration speed is not fatal. */ - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) =3D=3D 0) { + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) =3D=3D = 0) { qemuMonitorSetMigrationSpeed(priv->mon, QEMU_DOMAIN_MIG_BANDWIDTH_MAX); priv->migMaxBandwidth =3D QEMU_DOMAIN_MIG_BANDWIDTH_MAX; - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) return -1; } =20 @@ -5582,7 +5596,7 @@ qemuMigrationToFile(virQEMUDriverPtr driver, virDomai= nObjPtr vm, compressor ? pipeFD[1] : fd) < 0) goto cleanup; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; =20 if (!compressor) { @@ -5605,11 +5619,11 @@ qemuMigrationToFile(virQEMUDriverPtr driver, virDom= ainObjPtr vm, if (virSetCloseExec(pipeFD[1]) < 0) { virReportSystemError(errno, "%s", _("Unable to set cloexec flag")); - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto cleanup; } if (virCommandRunAsync(cmd, NULL) < 0) { - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); goto cleanup; } rc =3D qemuMonitorMigrateToFd(priv->mon, @@ -5619,7 +5633,7 @@ qemuMigrationToFile(virQEMUDriverPtr driver, virDomai= nObjPtr vm, VIR_CLOSE(pipeFD[1]) < 0) VIR_WARN("failed to close intermediate pipe"); } - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; if (rc < 0) goto cleanup; @@ -5631,9 +5645,9 @@ qemuMigrationToFile(virQEMUDriverPtr driver, virDomai= nObjPtr vm, orig_err =3D virSaveLastError(); virCommandAbort(cmd); if (virDomainObjIsActive(vm) && - qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) =3D= =3D 0) { + qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon)= =3D=3D 0) { qemuMonitorMigrateCancel(priv->mon); - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); } } goto cleanup; @@ -5651,10 +5665,10 @@ qemuMigrationToFile(virQEMUDriverPtr driver, virDom= ainObjPtr vm, =20 /* Restore max migration bandwidth */ if (virDomainObjIsActive(vm) && - qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) =3D=3D 0) { + qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) =3D=3D = 0) { qemuMonitorSetMigrationSpeed(priv->mon, saveMigBandwidth); priv->migMaxBandwidth =3D saveMigBandwidth; - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); } =20 VIR_FORCE_CLOSE(pipeFD[0]); @@ -5683,6 +5697,7 @@ qemuMigrationCancel(virQEMUDriverPtr driver, bool storage =3D false; size_t i; int ret =3D -1; + qemuMonitorPtr mon; =20 VIR_DEBUG("Canceling unfinished outgoing migration of domain %s", vm->def->name); @@ -5695,13 +5710,13 @@ qemuMigrationCancel(virQEMUDriverPtr driver, } } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); =20 ignore_value(qemuMonitorMigrateCancel(priv->mon)); if (storage) blockJobs =3D qemuMonitorGetAllBlockJobInfo(priv->mon); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || (storage && !blockJobs= )) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || (storage && !bloc= kJobs)) goto endsyncjob; =20 if (!storage) { @@ -6071,6 +6086,7 @@ qemuMigrationFetchMirrorStats(virQEMUDriverPtr driver, bool nbd =3D false; virHashTablePtr blockinfo =3D NULL; qemuDomainMirrorStatsPtr stats =3D &jobInfo->mirrorStats; + qemuMonitorPtr mon; =20 for (i =3D 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk =3D vm->def->disks[i]; @@ -6083,12 +6099,12 @@ qemuMigrationFetchMirrorStats(virQEMUDriverPtr driv= er, if (!nbd) return 0; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 blockinfo =3D qemuMonitorGetAllBlockJobInfo(priv->mon); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0 || !blockinfo) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || !blockinfo) return -1; =20 memset(stats, 0, sizeof(*stats)); diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_coo= kie.c old mode 100644 new mode 100755 index 945530c..27003c6 --- a/src/qemu/qemu_migration_cookie.c +++ b/src/qemu/qemu_migration_cookie.c @@ -452,6 +452,7 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig, virHashTablePtr stats =3D NULL; size_t i; int ret =3D -1, rc; + qemuMonitorPtr mon; =20 /* It is not a bug if there already is a NBD data */ qemuMigrationCookieNBDFree(mig->nbd); @@ -473,10 +474,10 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig, goto cleanup; =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, - priv->job.asyncJob) < 0) + priv->job.asyncJob, &mon) <= 0) goto cleanup; rc =3D qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats, f= alse); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; if (rc < 0) goto cleanup; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c old mode 100644 new mode 100755 index c1da3bb..6961348 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -543,6 +543,7 @@ qemuProcessFakeReboot(void *opaque) virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); virDomainRunningReason reason =3D VIR_DOMAIN_RUNNING_BOOTED; int ret =3D -1, rc; + qemuMonitorPtr mon; =20 VIR_DEBUG("vm=3D%p", vm); virObjectLock(vm); @@ -555,10 +556,10 @@ qemuProcessFakeReboot(void *opaque) goto endjob; } =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorSystemReset(priv->mon); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto endjob; =20 if (rc < 0) @@ -1767,13 +1768,14 @@ qemuProcessInitMonitor(virQEMUDriverPtr driver, qemuDomainAsyncJob asyncJob) { int ret; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 ret =3D qemuMonitorSetCapabilities(QEMU_DOMAIN_PRIVATE(vm)->mon); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 return ret; @@ -2094,12 +2096,13 @@ qemuRefreshVirtioChannelState(virQEMUDriverPtr driv= er, qemuDomainObjPrivatePtr priv =3D vm->privateData; virHashTablePtr info =3D NULL; int ret =3D -1; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; =20 ret =3D qemuMonitorGetChardevInfo(priv->mon, &info); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 if (ret < 0) @@ -2121,15 +2124,16 @@ qemuRefreshRTC(virQEMUDriverPtr driver, struct tm thenbits; long localOffset; int rv; + qemuMonitorPtr mon; =20 if (vm->def->clock.offset !=3D VIR_DOMAIN_CLOCK_OFFSET_VARIABLE) return; =20 memset(&thenbits, 0, sizeof(thenbits)); - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); now =3D time(NULL); rv =3D qemuMonitorGetRTCTime(priv->mon, &thenbits); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) rv =3D -1; =20 if (rv < 0) @@ -2156,6 +2160,7 @@ qemuProcessRefreshBalloonState(virQEMUDriverPtr drive= r, { unsigned long long balloon; int rc; + qemuMonitorPtr mon; =20 /* if no ballooning is available, the current size equals to the curre= nt * full memory size */ @@ -2164,11 +2169,11 @@ qemuProcessRefreshBalloonState(virQEMUDriverPtr dri= ver, return 0; } =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 rc =3D qemuMonitorGetBalloonInfo(qemuDomainGetMonitor(vm), &balloon); - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0 || rc < 0) return -1; =20 vm->def->mem.cur_balloon =3D balloon; @@ -2186,6 +2191,7 @@ qemuProcessWaitForMonitor(virQEMUDriverPtr driver, int ret =3D -1; virHashTablePtr info =3D NULL; qemuDomainObjPrivatePtr priv; + qemuMonitorPtr mon; =20 VIR_DEBUG("Connect monitor to %p '%s'", vm, vm->def->name); if (qemuConnectMonitor(driver, vm, asyncJob, logCtxt) < 0) @@ -2196,11 +2202,11 @@ qemuProcessWaitForMonitor(virQEMUDriverPtr driver, * Note that the monitor itself can be on a pty, so we still need to t= ry the * log output method. */ priv =3D vm->privateData; - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; ret =3D qemuMonitorGetChardevInfo(priv->mon, &info); VIR_DEBUG("qemuMonitorGetChardevInfo returned %i", ret); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 if (ret =3D=3D 0) { @@ -2235,6 +2241,7 @@ qemuProcessDetectIOThreadPIDs(virQEMUDriverPtr driver, int niothreads =3D 0; int ret =3D -1; size_t i; + qemuMonitorPtr mon; =20 if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD)) { ret =3D 0; @@ -2242,10 +2249,10 @@ qemuProcessDetectIOThreadPIDs(virQEMUDriverPtr driv= er, } =20 /* Get the list of IOThreads from qemu */ - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; niothreads =3D qemuMonitorGetIOThreads(priv->mon, &iothreads); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; if (niothreads < 0) goto cleanup; @@ -2374,8 +2381,9 @@ qemuProcessSetLinkStates(virQEMUDriverPtr driver, size_t i; int ret =3D -1; int rv; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 for (i =3D 0; i < def->nnets; i++) { @@ -2409,7 +2417,7 @@ qemuProcessSetLinkStates(virQEMUDriverPtr driver, ret =3D 0; =20 cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; return ret; } @@ -2578,6 +2586,7 @@ qemuProcessInitPasswords(virConnectPtr conn, size_t i; char *alias =3D NULL; char *secret =3D NULL; + qemuMonitorPtr mon; =20 for (i =3D 0; i < vm->def->ngraphics; ++i) { virDomainGraphicsDefPtr graphics =3D vm->def->graphics[i]; @@ -2621,10 +2630,10 @@ qemuProcessInitPasswords(virConnectPtr conn, VIR_FREE(alias); if (!(alias =3D qemuAliasFromDisk(vm->def->disks[i]))) goto cleanup; - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; ret =3D qemuMonitorSetDrivePassphrase(priv->mon, alias, secret); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; if (ret < 0) goto cleanup; @@ -2695,8 +2704,9 @@ qemuProcessUpdateVideoRamSize(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; virDomainVideoDefPtr video =3D NULL; virQEMUDriverConfigPtr cfg =3D NULL; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 for (i =3D 0; i < vm->def->nvideos; i++) { @@ -2748,7 +2758,7 @@ qemuProcessUpdateVideoRamSize(virQEMUDriverPtr driver, =20 } =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) return -1; =20 cfg =3D virQEMUDriverGetConfig(driver); @@ -2758,7 +2768,7 @@ qemuProcessUpdateVideoRamSize(virQEMUDriverPtr driver, return ret; =20 error: - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); return -1; } =20 @@ -2862,6 +2872,7 @@ qemuProcessStartCPUs(virQEMUDriverPtr driver, virDoma= inObjPtr vm, int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + qemuMonitorPtr mon; =20 /* Bring up netdevs before starting CPUs */ if (qemuInterfaceStartDevices(vm->def) < 0) @@ -2878,11 +2889,11 @@ qemuProcessStartCPUs(virQEMUDriverPtr driver, virDo= mainObjPtr vm, } VIR_FREE(priv->lockState); =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto release; =20 ret =3D qemuMonitorStartCPUs(priv->mon, conn); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 if (ret < 0) @@ -2909,14 +2920,15 @@ int qemuProcessStopCPUs(virQEMUDriverPtr driver, { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; + qemuMonitorPtr mon; =20 VIR_FREE(priv->lockState); =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; =20 ret =3D qemuMonitorStopCPUs(priv->mon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; =20 if (ret < 0) @@ -2986,10 +2998,11 @@ qemuProcessUpdateState(virQEMUDriverPtr driver, vir= DomainObjPtr vm) bool running; char *msg =3D NULL; int ret; + qemuMonitorPtr mon; =20 - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorGetStatus(priv->mon, &running, &reason); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) return -1; =20 if (ret < 0) @@ -3203,6 +3216,7 @@ qemuProcessRecoverJob(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; virDomainState state; int reason; + qemuMonitorPtr mon; =20 state =3D virDomainObjGetState(vm, &reason); =20 @@ -3222,9 +3236,9 @@ qemuProcessRecoverJob(virQEMUDriverPtr driver, case QEMU_ASYNC_JOB_SAVE: case QEMU_ASYNC_JOB_DUMP: case QEMU_ASYNC_JOB_SNAPSHOT: - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); ignore_value(qemuMonitorMigrateCancel(priv->mon)); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) return -1; /* resume the domain but only if it was paused as a result of * running a migration-to-file operation. Although we are @@ -3814,6 +3828,7 @@ qemuProcessFetchGuestCPU(virQEMUDriverPtr driver, virCPUDataPtr dataEnabled =3D NULL; virCPUDataPtr dataDisabled =3D NULL; int rc; + qemuMonitorPtr mon; =20 *enabled =3D NULL; *disabled =3D NULL; @@ -3821,13 +3836,13 @@ qemuProcessFetchGuestCPU(virQEMUDriverPtr driver, if (!ARCH_IS_X86(vm->def->os.arch)) return 0; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto error; =20 rc =3D qemuMonitorGetGuestCPU(priv->mon, vm->def->os.arch, &dataEnabled, &dataDisabled); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto error; =20 if (rc =3D=3D -1) @@ -3945,13 +3960,14 @@ qemuProcessFetchCPUDefinitions(virQEMUDriverPtr dri= ver, { qemuDomainObjPrivatePtr priv =3D vm->privateData; virDomainCapsCPUModelsPtr models =3D NULL; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto error; =20 models =3D virQEMUCapsFetchCPUDefinitions(priv->mon); =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto error; =20 return models; @@ -4569,11 +4585,12 @@ qemuProcessSetupBalloon(virQEMUDriverPtr driver, unsigned long long balloon =3D vm->def->mem.cur_balloon; qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret =3D -1; + qemuMonitorPtr mon; =20 if (!virDomainDefHasMemballoon(vm->def)) return 0; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) return -1; =20 if (vm->def->memballoon->period) @@ -4585,7 +4602,7 @@ qemuProcessSetupBalloon(virQEMUDriverPtr driver, ret =3D 0; =20 cleanup: - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) ret =3D -1; return ret; } @@ -5322,6 +5339,7 @@ qemuProcessSetupHotpluggableVcpus(virQEMUDriverPtr dr= iver, size_t i; int ret =3D -1; int rc; + qemuMonitorPtr mon; =20 virDomainVcpuDefPtr *bootHotplug =3D NULL; size_t nbootHotplug =3D 0; @@ -5357,13 +5375,13 @@ qemuProcessSetupHotpluggableVcpus(virQEMUDriverPtr = driver, if (!(vcpuprops =3D qemuBuildHotpluggableCPUProps(vcpu))) goto cleanup; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) < 0) goto cleanup; =20 rc =3D qemuMonitorAddDeviceArgs(qemuDomainGetMonitor(vm), vcpuprop= s); vcpuprops =3D NULL; =20 - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; =20 if (rc < 0) @@ -6765,6 +6783,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UN= USED, virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); virCapsPtr caps =3D NULL; bool active =3D false; + qemuMonitorPtr mon; =20 VIR_DEBUG("Beginning VM attach process"); =20 @@ -6911,14 +6930,14 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_= UNUSED, goto error; =20 VIR_DEBUG("Getting initial memory amount"); - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorGetBalloonInfo(priv->mon, &vm->def->mem.cur_balloon) < = 0) goto exit_monitor; if (qemuMonitorGetStatus(priv->mon, &running, &reason) < 0) goto exit_monitor; if (qemuMonitorGetVirtType(priv->mon, &vm->def->virtType) < 0) goto exit_monitor; - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto error; =20 if (running) { @@ -6927,10 +6946,10 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_= UNUSED, if (vm->def->memballoon && vm->def->memballoon->model =3D=3D VIR_DOMAIN_MEMBALLOON_MODEL_= VIRTIO && vm->def->memballoon->period) { - qemuDomainObjEnterMonitor(driver, vm); + mon =3D qemuDomainObjEnterMonitor(driver, vm); qemuMonitorSetMemoryStatsPeriod(priv->mon, vm->def->memballoon, vm->def->memballoon->period); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto error; } } else { @@ -6967,7 +6986,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UN= USED, return 0; =20 exit_monitor: - ignore_value(qemuDomainObjExitMonitor(driver, vm)); + ignore_value(qemuDomainObjExitMonitor(driver, vm, mon)); error: /* We jump here if we failed to attach to the VM for any reason. * Leave the domain running, but pretend we never attempted to @@ -7075,10 +7094,11 @@ qemuProcessRefreshDisks(virQEMUDriverPtr driver, virHashTablePtr table =3D NULL; int ret =3D -1; size_t i; + qemuMonitorPtr mon; =20 - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) =3D=3D 0) { + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob, &mon) =3D=3D = 0) { table =3D qemuMonitorGetBlockInfo(priv->mon); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm, mon) < 0) goto cleanup; } =20 --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list