From d27b0806cdd7f4bf45a83b9c3dc97320ac18f492 Mon Sep 17 00:00:00 2001 From: Dwight Engen Date: Tue, 18 Dec 2012 19:15:33 -0500 Subject: [PATCH] fix lxc-wait waiting forever for FREEZING, FROZEN, THAWED states MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/lxc/freezer.c | 6 ++++++ src/lxc/lxc_wait.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) 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,