]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Revert "lxcDomainShutdownFlags: Cleanup @flags usage"
authorEric Blake <eblake@redhat.com>
Mon, 6 Jan 2014 21:58:59 +0000 (14:58 -0700)
committerEric Blake <eblake@redhat.com>
Mon, 6 Jan 2014 21:59:44 +0000 (14:59 -0700)
This reverts commit aa4619337ccc0b171a3a4d17540da89429243c36.

This patch was accidentally pushed prematurely, and has incorrect
logic for which shutdown methods to attempt.

Signed-off-by: Eric Blake <eblake@redhat.com>
src/lxc/lxc_driver.c

index 7e9aa842943d937623eb3a5d0fc063b972f59f78..e5984743691ce5b831471a3256e7685c6a9ab5ae 100644 (file)
@@ -2701,8 +2701,7 @@ lxcDomainShutdownFlags(virDomainPtr dom,
     virDomainObjPtr vm;
     char *vroot = NULL;
     int ret = -1;
-    int rc = 0;
-    bool useInitctl = false, initctlRequested, signalRequested;
+    int rc;
 
     virCheckFlags(VIR_DOMAIN_SHUTDOWN_INITCTL |
                   VIR_DOMAIN_SHUTDOWN_SIGNAL, -1);
@@ -2731,24 +2730,25 @@ lxcDomainShutdownFlags(virDomainPtr dom,
                     (unsigned long long)priv->initpid) < 0)
         goto cleanup;
 
-    initctlRequested = flags & VIR_DOMAIN_SHUTDOWN_INITCTL;
-    signalRequested = flags & VIR_DOMAIN_SHUTDOWN_SIGNAL;
-
-    if (initctlRequested || !flags)
-        useInitctl = true;
-
-    if (useInitctl) {
-        rc = virInitctlSetRunLevel(VIR_INITCTL_RUNLEVEL_POWEROFF, vroot);
-        if (rc < 0 && !signalRequested)
+    if (flags == 0 ||
+        (flags & VIR_DOMAIN_SHUTDOWN_INITCTL)) {
+        if ((rc = virInitctlSetRunLevel(VIR_INITCTL_RUNLEVEL_POWEROFF,
+                                        vroot)) < 0) {
             goto cleanup;
-        if (rc == 0 && !signalRequested) {
+        }
+        if (rc == 0 && flags != 0 &&
+            ((flags & ~VIR_DOMAIN_SHUTDOWN_INITCTL) == 0)) {
             virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
                            _("Container does not provide an initctl pipe"));
             goto cleanup;
         }
+    } else {
+        rc = 0;
     }
 
-    if (rc == 0 && !useInitctl) {
+    if (rc == 0 &&
+        (flags == 0 ||
+         (flags & VIR_DOMAIN_SHUTDOWN_SIGNAL))) {
         if (kill(priv->initpid, SIGTERM) < 0 &&
             errno != ESRCH) {
             virReportSystemError(errno,