The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxc/pull/3456

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) ===
Stopping a lxc container with without waiting on it was broken in master. This
patch fixes it.

Signed-off-by: Robert Vogelgesang <vo...@folz.de>
From 60cd5091148ce765338915495f6e5e11969608a5 Mon Sep 17 00:00:00 2001
From: Robert Vogelgesang <vo...@folz.de>
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 <vo...@folz.de>
---
 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 51422a56de..aac6214825 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)
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to