qemu: Grab a QUERY job when formatting domain XML

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 <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Michal Privoznik 2024-12-11 13:26:45 +01:00
parent 56d448ad0f
commit 6cc93bf288

View File

@ -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;