The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxc/pull/3249
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
From 1126d14815697d414a277847d38bc2af92bd4d79 Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Thu, 9 Jan 2020 12:28:19 +0100 Subject: [PATCH 1/3] mainloop: add missing \n Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- src/lxc/mainloop.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lxc/mainloop.c b/src/lxc/mainloop.c index 3a31ed7b1b..2ef5a93e6b 100644 --- a/src/lxc/mainloop.c +++ b/src/lxc/mainloop.c @@ -65,6 +65,7 @@ int lxc_mainloop_add_handler(struct lxc_epoll_descr *descr, int fd, struct epoll_event ev; struct mainloop_handler *handler; struct lxc_list *item; + if (fd < 0) return -1; From 38bbeb799e33130932ff3d20f57ab060c184675a Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Thu, 9 Jan 2020 12:28:54 +0100 Subject: [PATCH 2/3] tests: timeout after 60 seconds That should be more than enough to reboot. Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- src/tests/api_reboot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/api_reboot.c b/src/tests/api_reboot.c index 730d6a81a5..f6864e8777 100644 --- a/src/tests/api_reboot.c +++ b/src/tests/api_reboot.c @@ -84,7 +84,7 @@ int main(int argc, char *argv[]) */ sleep(5); - if (!c->reboot2(c, -1)) { + if (!c->reboot2(c, 60)) { lxc_error("%s\n", "Failed to reboot container \"reboot\""); goto on_error_stop; } From c718fac1855da04d221bf7055c981efeb6a323bc Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Thu, 9 Jan 2020 12:25:30 +0100 Subject: [PATCH 3/3] start: handle kernel header and kernel incompatability We might e.g. be compiled in a container with old kernel headers. In this scenario CLONE_PIDFD will work but pidfd_send_signal() might not be detected because __NR_pidfd_send_signal is not defined because the kernel headers don't match the kernel version. This explains and fixes test-suite hangs on Jenkins I've recently debugged. Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- src/lxc/start.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/lxc/start.c b/src/lxc/start.c index f085aa60d0..9ca85911ce 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -1091,11 +1091,13 @@ void lxc_abort(const char *name, struct lxc_handler *handler) lxc_set_state(name, handler, ABORTING); - if (handler->pidfd >= 0) + if (handler->pidfd >= 0) { ret = lxc_raw_pidfd_send_signal(handler->pidfd, SIGKILL, NULL, 0); - else if (handler->pid > 0) - ret = kill(handler->pid, SIGKILL); - if (ret < 0) + if (ret) + SYSWARN("Failed to send SIGKILL via pidfd %d for process %d", handler->pidfd, handler->pid); + } + + if (ret && (errno != ESRCH) && kill(handler->pid, SIGKILL)) SYSERROR("Failed to send SIGKILL to %d", handler->pid); do {
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel