From 2341916a0367130d5a084a89884c15c3a835a4b4 Mon Sep 17 00:00:00 2001 From: Rachid Koucha <47061324+Rachid-Koucha@users.noreply.github.com> Date: Sat, 26 Jan 2019 23:46:34 +0100 Subject: [PATCH 1/1] Avoid double lxc-freeze/unfreeze If we call lxc-freeze multiple times for an already frozen container, LXC triggers useless freezing by writing into the "freezer.state" cgroup file. This is the same when we call lxc-unfreeze multiple times. Checking the current state with a LXC_CMD_GET_STATE (calling c->state) would permit to check if the container is FROZEN or not. Signed-off-by: Rachid Koucha --- src/lxc/lxccontainer.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index bee34db01..364c6c7a7 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -525,13 +525,17 @@ WRAP_API(bool, lxcapi_is_running) static bool do_lxcapi_freeze(struct lxc_container *c) { int ret; + lxc_state_t s; if (!c) return false; - ret = lxc_freeze(c->lxc_conf, c->name, c->config_path); - if (ret < 0) - return false; + s = lxc_getstate(c->name, c->config_path); + if (s != FROZEN) { + ret = lxc_freeze(c->lxc_conf, c->name, c->config_path); + if (ret < 0) + return false; + } return true; } @@ -541,13 +545,17 @@ WRAP_API(bool, lxcapi_freeze) static bool do_lxcapi_unfreeze(struct lxc_container *c) { int ret; + lxc_state_t s; if (!c) return false; - ret = lxc_unfreeze(c->lxc_conf, c->name, c->config_path); - if (ret < 0) - return false; + s = lxc_getstate(c->name, c->config_path); + if (s == FROZEN) { + ret = lxc_unfreeze(c->lxc_conf, c->name, c->config_path); + if (ret < 0) + return false; + } return true; } -- 2.39.5