From: Dwight Engen Date: Wed, 19 Dec 2012 00:15:33 +0000 (-0500) Subject: fix lxc-wait waiting forever for FREEZING, FROZEN, THAWED states X-Git-Tag: lxc-0.9.0.alpha3~1^2~78 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d27b0806cdd7f4bf45a83b9c3dc97320ac18f492;p=thirdparty%2Flxc.git fix lxc-wait waiting forever for FREEZING, FROZEN, THAWED states 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 Acked-by: Stéphane Graber --- diff --git a/src/lxc/freezer.c b/src/lxc/freezer.c index 2a6f0f52e..3e4f55da5 100644 --- a/src/lxc/freezer.c +++ b/src/lxc/freezer.c @@ -32,6 +32,8 @@ #include #include "error.h" +#include "state.h" +#include "monitor.h" #include #include @@ -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); } diff --git a/src/lxc/lxc_wait.c b/src/lxc/lxc_wait.c index de1163e37..799225d97 100644 --- a/src/lxc/lxc_wait.c +++ b/src/lxc/lxc_wait.c @@ -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,