]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
commands: support timeout in LXC_CMD_GET_STATE 4260/head
authorAlexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
Tue, 17 Jan 2023 17:10:46 +0000 (18:10 +0100)
committerAlexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
Fri, 21 Apr 2023 18:15:20 +0000 (20:15 +0200)
Issue #4257

Signed-off-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
src/lxc/commands.c
src/lxc/commands.h
src/lxc/lxccontainer.c
src/lxc/state.c
src/lxc/state.h

index a6f476045bfbcc1e558f8e3f06b7eba146f41351..1bd7407024d64b0cd3c599b7251924f27d80fb09 100644 (file)
@@ -1059,7 +1059,7 @@ out:
  *
  * Returns the state on success, < 0 on failure
  */
-int lxc_cmd_get_state(const char *name, const char *lxcpath)
+int lxc_cmd_get_state(const char *name, const char *lxcpath, int timeout)
 {
        bool stopped = false;
        ssize_t ret;
@@ -1067,7 +1067,7 @@ int lxc_cmd_get_state(const char *name, const char *lxcpath)
 
        lxc_cmd_init(&cmd, LXC_CMD_GET_STATE);
 
-       ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL);
+       ret = lxc_cmd_timeout(name, &cmd, &stopped, lxcpath, NULL, timeout);
        if (ret < 0 && stopped)
                return STOPPED;
 
index 2a39748075cdfbf0cac9792198b97fb8d1f107b2..2e1968ba8f790b8e6b3940676e75f386139d94ab 100644 (file)
@@ -119,7 +119,7 @@ __hidden extern char *lxc_cmd_get_lxcpath(const char *hashed_sock);
 __hidden extern char *lxc_cmd_get_systemd_scope(const char *name, const char *lxcpath);
 __hidden extern pid_t lxc_cmd_get_init_pid(const char *name, const char *lxcpath);
 __hidden extern int lxc_cmd_get_init_pidfd(const char *name, const char *lxcpath);
-__hidden extern int lxc_cmd_get_state(const char *name, const char *lxcpath);
+__hidden extern int lxc_cmd_get_state(const char *name, const char *lxcpath, int timeout);
 __hidden extern int lxc_cmd_stop(const char *name, const char *lxcpath);
 
 /* lxc_cmd_add_state_client    Register a new state client fd in the container's
index 61a3a7ee022cd112059fb81766a063dc57c8cac9..fe182e5434bbf66bec986e1950ca3dfd89fa2751 100644 (file)
@@ -491,7 +491,7 @@ static const char *do_lxcapi_state(struct lxc_container *c)
        if (!c)
                return NULL;
 
-       s = lxc_getstate(c->name, c->config_path);
+       s = lxc_getstate(c->name, c->config_path, c->rcv_timeout);
        return lxc_state2str(s);
 }
 
@@ -501,7 +501,7 @@ static bool is_stopped(struct lxc_container *c)
 {
        lxc_state_t s;
 
-       s = lxc_getstate(c->name, c->config_path);
+       s = lxc_getstate(c->name, c->config_path, c->rcv_timeout);
        return (s == STOPPED);
 }
 
@@ -523,7 +523,7 @@ static bool do_lxcapi_freeze(struct lxc_container *c)
        if (!c || !c->lxc_conf)
                return false;
 
-       s = lxc_getstate(c->name, c->config_path);
+       s = lxc_getstate(c->name, c->config_path, 0);
        if (s != FROZEN) {
                ret = cgroup_freeze(c->name, c->config_path, -1);
                if (ret == -ENOCGROUP2)
@@ -543,7 +543,7 @@ static bool do_lxcapi_unfreeze(struct lxc_container *c)
        if (!c || !c->lxc_conf)
                return false;
 
-       s = lxc_getstate(c->name, c->config_path);
+       s = lxc_getstate(c->name, c->config_path, 0);
        if (s == FROZEN) {
                ret = cgroup_unfreeze(c->name, c->config_path, -1);
                if (ret == -ENOCGROUP2)
index b4de0ea50b70755ed4a420be24fcfdbf30b3d611..2633327e75164d8f8d4c9bdad5fec03111c701f3 100644 (file)
@@ -52,9 +52,9 @@ lxc_state_t lxc_str2state(const char *state)
        return -1;
 }
 
-lxc_state_t lxc_getstate(const char *name, const char *lxcpath)
+lxc_state_t lxc_getstate(const char *name, const char *lxcpath, int timeout)
 {
-       return lxc_cmd_get_state(name, lxcpath);
+       return lxc_cmd_get_state(name, lxcpath, timeout);
 }
 
 static int fillwaitedstates(const char *strstates, lxc_state_t *states)
index 39a6f962dd5d38640862d1927461b874c55993c2..f47dfc947c11b2696a28cb9125a090bab05f3a5a 100644 (file)
@@ -27,7 +27,7 @@ enum {
        REBOOT_INIT
 };
 
-__hidden extern lxc_state_t lxc_getstate(const char *name, const char *lxcpath);
+__hidden extern lxc_state_t lxc_getstate(const char *name, const char *lxcpath, int timeout);
 
 __hidden extern lxc_state_t lxc_str2state(const char *state);
 __hidden extern const char *lxc_state2str(lxc_state_t state);