]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: refresh internal domain state after reset
authorKristina Hanicova <khanicov@redhat.com>
Tue, 6 Dec 2022 13:58:18 +0000 (14:58 +0100)
committerJán Tomko <jtomko@redhat.com>
Tue, 6 Dec 2022 15:24:52 +0000 (16:24 +0100)
Internal domain state may change during the reset and qemu does
not always send events about it.  In case it happens, internal
state of the domain in libvirt would be inconsistent with the
internal state in qemu which could cause additional problems
(e.g. cdrom tray state can change from open to closed).  The
solution is to refresh state after a successful reset to query
qemu about the current internal domain state.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1824722

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_driver.c

index 08ab04b468bc2deef357123f7c470b3fb2da91b4..4af8a8691c760552092c0bb004536dbd68866eda 100644 (file)
@@ -2000,6 +2000,7 @@ qemuDomainReset(virDomainPtr dom, unsigned int flags)
     int ret = -1;
     qemuDomainObjPrivate *priv;
     virDomainState state;
+    virQEMUDriver *driver = dom->conn->privateData;
 
     virCheckFlags(0, -1);
 
@@ -2026,6 +2027,8 @@ qemuDomainReset(virDomainPtr dom, unsigned int flags)
     if (state == VIR_DOMAIN_CRASHED)
         virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, VIR_DOMAIN_PAUSED_CRASHED);
 
+    qemuProcessRefreshState(driver, vm, VIR_ASYNC_JOB_NONE);
+
  endjob:
     virDomainObjEndJob(vm);