From b670f0e759b1e8c10d564aca568b44028eb34783 Mon Sep 17 00:00:00 2001 From: Alexander Mikhalitsyn Date: Tue, 17 Jan 2023 18:10:46 +0100 Subject: [PATCH] commands: support timeout in LXC_CMD_GET_STATE Issue #4257 Signed-off-by: Alexander Mikhalitsyn --- src/lxc/commands.c | 4 ++-- src/lxc/commands.h | 2 +- src/lxc/lxccontainer.c | 8 ++++---- src/lxc/state.c | 4 ++-- src/lxc/state.h | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lxc/commands.c b/src/lxc/commands.c index a6f476045..1bd740702 100644 --- a/src/lxc/commands.c +++ b/src/lxc/commands.c @@ -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; diff --git a/src/lxc/commands.h b/src/lxc/commands.h index 2a3974807..2e1968ba8 100644 --- a/src/lxc/commands.h +++ b/src/lxc/commands.h @@ -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 diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index 61a3a7ee0..fe182e543 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -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) diff --git a/src/lxc/state.c b/src/lxc/state.c index b4de0ea50..2633327e7 100644 --- a/src/lxc/state.c +++ b/src/lxc/state.c @@ -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) diff --git a/src/lxc/state.h b/src/lxc/state.h index 39a6f962d..f47dfc947 100644 --- a/src/lxc/state.h +++ b/src/lxc/state.h @@ -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); -- 2.47.2