]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: better detection of crashed domains
authorMartin Kletzander <mkletzan@redhat.com>
Wed, 6 Jun 2012 14:43:41 +0000 (16:43 +0200)
committerMartin Kletzander <mkletzan@redhat.com>
Thu, 7 Jun 2012 06:43:03 +0000 (08:43 +0200)
When libvirtd is started and there is an unusable/not-connectable
leftover from earlier started machine, it's more reasonable to say
that the machine "crashed" if we know it was started with
"-no-shutdown".
This patch fixes that and also changes the other result (when machine
was started without "-no-shutdown") to "unknown", because the previous
"failed" reason means (according to include/libvirt/libvirt.h.in:174),
that the machine failed to start.

src/qemu/qemu_process.c

index 58ba5bf89783da80b78b149edb519286d900fa2b..33f57bebdaf0ca8d1834144a9cb1eb133d4860ae 100644 (file)
@@ -3141,7 +3141,17 @@ error:
              * to remove danger of it ending up running twice if
              * user tries to start it again later
              */
-            qemuProcessStop(driver, obj, 0, VIR_DOMAIN_SHUTOFF_FAILED);
+            if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_NO_SHUTDOWN)) {
+                /* If we couldn't get the monitor and qemu supports
+                 * no-shutdown, we can safely say that the domain
+                 * crashed ... */
+                state = VIR_DOMAIN_SHUTOFF_CRASHED;
+            } else {
+                /* ... but if it doesn't we can't say what the state
+                 * really is and FAILED means "failed to start" */
+                state = VIR_DOMAIN_SHUTOFF_UNKNOWN;
+            }
+            qemuProcessStop(driver, obj, 0, state);
             if (!obj->persistent)
                 qemuDomainRemoveInactive(driver, obj);
             else