From: Peter Krempa <[email protected]>

When probing of capabilities fails 'qemuProcessQMPStop' kills the qemu
process, but also resets the error. The virResetLastError() was
originally intended to reset the error from 'virProcessKillPainfully',
it also resets any probing error resulting in the following:

  $ virsh start VM
  error: Failed to start domain 'VM'
  error: An error occurred, but the cause is unknown

Keep the error clearing as this might be called on success but preserve
the original error around it.

Fixes: db7b0b12b7b07b8a0313161e3cbedb38a74e5954
Signed-off-by: Peter Krempa <[email protected]>
---
 src/qemu/qemu_process.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index cbe5cb33d3..4c94ff3c91 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -10239,6 +10239,8 @@ static qemuMonitorCallbacks callbacks = {
 static void
 qemuProcessQMPStop(qemuProcessQMP *proc)
 {
+    virErrorPtr err;
+
     if (proc->mon) {
         virObjectUnlock(proc->mon);
         g_clear_pointer(&proc->mon, qemuMonitorClose);
@@ -10255,10 +10257,12 @@ qemuProcessQMPStop(qemuProcessQMP *proc)
     virDomainObjEndAPI(&proc->vm);

     if (proc->pid != 0) {
+        virErrorPreserveLast(&err);
         VIR_DEBUG("Killing QMP caps process %lld", (long long)proc->pid);
         virProcessKillPainfully(proc->pid, true);
         virResetLastError();
         proc->pid = 0;
+        virErrorRestore(&err);
     }

     if (proc->pidfile)
-- 
2.54.0

Reply via email to