From: Rachid Koucha <47061324+Rachid-Koucha@users.noreply.github.com> Date: Sat, 26 Jan 2019 22:46:34 +0000 (+0100) Subject: Avoid double lxc-freeze/unfreeze X-Git-Tag: lxc-3.2.0~182^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2341916a0367130d5a084a89884c15c3a835a4b4;p=thirdparty%2Flxc.git 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 --- 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; }