]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
fix lxc-wait waiting forever for FREEZING, FROZEN, THAWED states
authorDwight Engen <dwight.engen@oracle.com>
Wed, 19 Dec 2012 00:15:33 +0000 (19:15 -0500)
committerStéphane Graber <stgraber@ubuntu.com>
Thu, 3 Jan 2013 23:14:07 +0000 (18:14 -0500)
These states are kept by the kernel in the freezer.state cgroup item, and
are never set in handler->state with lxc_set_state(). If lxc transitions
a container to/from the freezer after an lxc-wait for one of the above
states has already started, the lxc-wait will never see the new state. This
change has lxc send the new state to the lxc-monitor socket.

Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
src/lxc/freezer.c
src/lxc/lxc_wait.c

index 2a6f0f52ee00ca7d96f05803f9a44fc0e8141b52..3e4f55da543ed1e10feb191feab73918f01cc0cf 100644 (file)
@@ -32,6 +32,8 @@
 #include <sys/param.h>
 
 #include "error.h"
+#include "state.h"
+#include "monitor.h"
 
 #include <lxc/log.h>
 #include <lxc/cgroup.h>
@@ -95,7 +97,10 @@ static int freeze_unfreeze(const char *name, int freeze)
 
                ret = strncmp(f, tmpf, strlen(f));
                if (!ret)
+               {
+                       lxc_monitor_send_state(name, freeze ? FROZEN : THAWED);
                        break;          /* Success */
+               }
 
                sleep(1);
 
@@ -119,6 +124,7 @@ out:
 
 int lxc_freeze(const char *name)
 {
+       lxc_monitor_send_state(name, FREEZING);
        return freeze_unfreeze(name, 1);
 }
 
index de1163e37091f7b927ab5b4eaadcc917ea69437f..799225d970df75998d01162e1354c6802bebd92e 100644 (file)
@@ -70,7 +70,7 @@ Options :\n\
   -n, --name=NAME   NAME for name of the container\n\
   -s, --state=STATE ORed states to wait for\n\
                     STOPPED, STARTING, RUNNING, STOPPING,\n\
-                    ABORTING, FREEZING, FROZEN\n\
+                    ABORTING, FREEZING, FROZEN, THAWED\n\
   -t, --timeout=TMO Seconds to wait for state changes\n",
        .options  = my_longopts,
        .parser   = my_parser,