[libvirt] [PATCH] avoid shutting down the vm twice

Wen Congyang wency at cn.fujitsu.com
Thu Jan 27 03:18:46 UTC 2011


Steps to reproduce this bug:

1. use gdb to debug libvirtd, and set breakpoint in the function
   qemuConnectMonitor()
2. start a vm, and the libvirtd will be stopped in qemuConnectMonitor()
3. kill -STOP $(cat /var/run/libvirt/qemu/<domain>.pid)
4. continue to run libvirtd in gdb, and libvirtd will be blocked in the
   function qemuMonitorSetCapabilities()
5. kill -9 $(cat /var/run/libvirt/qemu/<domain>.pid)

Here is log of the qemu:
=========
LC_ALL=C PATH=/sbin:/usr/sbin:/bin:/usr/bin ...
char device redirected to /dev/pts/3
2011-01-27 09:38:48.101: shutting down
2011-01-27 09:41:26.401: shutting down
=========

The vm is shut down twice. I do not know whether this behavior has
side effect, but I think we should shutdown the vm only once.

Signed-off-by: Wen Congyang <wency at cn.fujitsu.com>

---
 src/qemu/qemu_driver.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 6140f0f..c527bb7 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -2972,7 +2972,11 @@ cleanup:
      * pretend we never started it */
     virCommandFree(cmd);
     VIR_FORCE_CLOSE(logfile);
-    qemudShutdownVMDaemon(driver, vm, 0);
+    /* The vm may be cloesd in other thread, so we should check whether the
+     * vm is active before shutdown.
+     */
+    if (virDomainObjIsActive(vm))
+        qemudShutdownVMDaemon(driver, vm, 0);
 
     return -1;
 }
-- 
1.7.1




More information about the libvir-list mailing list