]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemuProcessStop: Don't overwrite any errors
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 7 Jan 2014 13:31:13 +0000 (14:31 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 7 Jan 2014 13:50:40 +0000 (14:50 +0100)
Currently, the qemuProcessStop tries to open the domain log file
and saves the original error afterwards. Then all the cleanup is
done after which the error is restored back. This has however one
flaw: if opening of the log file fails an error is reported,
which results in previous error being overwritten (the useful
one, e.g. "PCI device XXXX:XXXX could not be found"). Hence, user
sees something like:

  error: failed to create logfile /var/log/libvirt/qemu/ovirt_usb.log: No such file or directory

instead of:

  error: internal error: Did not find USB device 8644:8003

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reported-by: Zhou Yimin <zhouyimin@huawei.com>
src/qemu/qemu_process.c

index d0fde5495b15b8c9d4f4a0e23fc78dc63c2fe0f8..9331744fd527cb8d8ec5d51f6d6715aa5a891fc8 100644 (file)
@@ -4224,6 +4224,10 @@ void qemuProcessStop(virQEMUDriverPtr driver,
         return;
     }
 
+    /* This method is routinely used in clean up paths. Disable error
+     * reporting so we don't squash a legit error. */
+    orig_err = virSaveLastError();
+
     /*
      * We may unlock the vm in qemuProcessKill(), and another thread
      * can lock the vm, and then call qemuProcessStop(). So we should
@@ -4256,10 +4260,6 @@ void qemuProcessStop(virQEMUDriverPtr driver,
                       virStrerror(errno, ebuf, sizeof(ebuf)));
     }
 
-    /* This method is routinely used in clean up paths. Disable error
-     * reporting so we don't squash a legit error. */
-    orig_err = virSaveLastError();
-
     virDomainConfVMNWFilterTeardown(vm);
 
     if (cfg->macFilter) {