]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
Must unfreeze while stopping container
authorSukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Mon, 12 Jul 2010 13:13:18 +0000 (15:13 +0200)
committerDaniel Lezcano <dlezcano@fr.ibm.com>
Mon, 12 Jul 2010 13:13:18 +0000 (15:13 +0200)
As pointed out by Dan Smith, when a container is being stopped, it must
also be unfrozen after posting the SIGKILL. Otherwise if the container
is frozen when the SIGKILL is posted, the SIGKILL will remain pending
and the lxc-stop command will block until lxc-unfreeze is explicitly
called).

(lxc-stop waits for the container to exit and close the socket but since
the container is frozen, lxc-stop will block).

Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Acked-by: Matt Helsley <matthltc@us.ibm.com>
Acked-by: Dan Smith <danms@us.ibm.com>
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
src/lxc/stop.c

index b751af51be78d9a54da3bf8b7f8128491177ac59..f441e46c621f0c13f8facd5ea0e84c5784deb2a0 100644 (file)
@@ -83,8 +83,14 @@ extern int lxc_stop_callback(int fd, struct lxc_request *request,
        int ret;
 
        answer.ret = kill(handler->pid, SIGKILL);
-       if (!answer.ret)
-               return 0;
+       if (!answer.ret) {
+               ret = lxc_unfreeze(handler->name);
+               if (!ret)
+                       return 0;
+
+               ERROR("failed to unfreeze container");
+               answer.ret = ret;
+       }
 
        ret = send(fd, &answer, sizeof(answer), 0);
        if (ret < 0) {