From 6cc93bf28842526be2fd596a607ebca796b7fb2e Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Wed, 11 Dec 2024 13:26:45 +0100 Subject: [PATCH] qemu: Grab a QUERY job when formatting domain XML MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit It may happen that, for instance after daemon restart, that one thread is still in qemuProcessReconnect(), i.e. filling in runtime information by talking to QEMU on monitor. If another thread then tries to format domain XML (which is currently guarded by plain mutex on virDomainObj) it'll produce incomplete and misleading information (e.g. current size of virtio-mem). This happens because the reconnecting thread talks to QEMU on monitor and thus unlocks the domain object frequently allowing the XML formatting thread to acquire the mutex meanwhile. Resolves: https://issues.redhat.com/browse/RHEL-71042 Signed-off-by: Michal Privoznik Reviewed-by: Ján Tomko --- src/qemu/qemu_driver.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 09f7edda7d..f1a633fdd3 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -6163,6 +6163,9 @@ static char if (virDomainGetXMLDescEnsureACL(dom->conn, vm->def, flags) < 0) goto cleanup; + if (virDomainObjBeginJob(vm, VIR_JOB_QUERY) < 0) + goto cleanup; + qemuDomainUpdateCurrentMemorySize(vm); if ((flags & VIR_DOMAIN_XML_MIGRATABLE)) @@ -6177,6 +6180,8 @@ static char ret = qemuDomainFormatXML(driver, vm, flags); + virDomainObjEndJob(vm); + cleanup: virDomainObjEndAPI(&vm); return ret; -- 2.47.2