[lxc-devel] [PATCH] fix lxc-wait waiting forever for FREEZING, FROZEN, THAWED states
Dwight Engen
dwight.engen at oracle.com
Wed Dec 19 00:15:33 UTC 2012
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 at oracle.com>
---
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 2a6f0f5..3e4f55d 100644
--- a/src/lxc/freezer.c
+++ b/src/lxc/freezer.c
@@ -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);
}
diff --git a/src/lxc/lxc_wait.c b/src/lxc/lxc_wait.c
index de1163e..799225d 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,
--
1.7.12.3
More information about the lxc-devel
mailing list