From 60cd5091148ce765338915495f6e5e11969608a5 Mon Sep 17 00:00:00 2001 From: Robert Vogelgesang Date: Tue, 23 Jun 2020 10:51:33 +0200 Subject: [PATCH] lxccontainer: fix non-blocking container stop Stopping a lxc container with without waiting on it was broken in master. This patch fixes it. Signed-off-by: Robert Vogelgesang --- src/lxc/lxccontainer.c | 56 +++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index 51422a56d..aac621482 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -2090,41 +2090,41 @@ static bool do_lxcapi_shutdown(struct lxc_container *c, int timeout) if (ret < MAX_STATE) return false; + } - if (pidfd >= 0) { - struct pollfd pidfd_poll = { - .events = POLLIN, - .fd = pidfd, - }; + if (pidfd >= 0) { + struct pollfd pidfd_poll = { + .events = POLLIN, + .fd = pidfd, + }; - killret = lxc_raw_pidfd_send_signal(pidfd, haltsignal, - NULL, 0); - if (killret < 0) - return log_warn(false, "Failed to send signal %d to pidfd %d", - haltsignal, pidfd); + killret = lxc_raw_pidfd_send_signal(pidfd, haltsignal, + NULL, 0); + if (killret < 0) + return log_warn(false, "Failed to send signal %d to pidfd %d", + haltsignal, pidfd); - TRACE("Sent signal %d to pidfd %d", haltsignal, pidfd); + TRACE("Sent signal %d to pidfd %d", haltsignal, pidfd); - /* - * No need for going through all of the state server - * complications anymore. We can just poll on pidfds. :) - */ + /* + * No need for going through all of the state server + * complications anymore. We can just poll on pidfds. :) + */ - if (timeout != 0) { - ret = poll(&pidfd_poll, 1, timeout * 1000); - if (ret < 0 || !(pidfd_poll.revents & POLLIN)) - return false; + if (timeout != 0) { + ret = poll(&pidfd_poll, 1, timeout * 1000); + if (ret < 0 || !(pidfd_poll.revents & POLLIN)) + return false; - TRACE("Pidfd polling detected container exit"); - } - } else { - killret = kill(pid, haltsignal); - if (killret < 0) - return log_warn(false, "Failed to send signal %d to pid %d", - haltsignal, pid); - - TRACE("Sent signal %d to pid %d", haltsignal, pid); + TRACE("Pidfd polling detected container exit"); } + } else { + killret = kill(pid, haltsignal); + if (killret < 0) + return log_warn(false, "Failed to send signal %d to pid %d", + haltsignal, pid); + + TRACE("Sent signal %d to pid %d", haltsignal, pid); } if (timeout == 0) -- 2.47.2