[OpenWrt-Devel] [PATCH] procd: fix shutdown when running in a container

Paul Spooren mail at aparcar.org
Mon Aug 5 12:07:45 EDT 2019


Applies patch from @mikma [0] to fix Docker shutdown. Added detection to
state.c if running in a containre or not.

Tested with a x86/64 Docker image.

Fixes FS#2425

CC: Mikael Magnusson <mikma at users.sourceforge.net>
CC: Petr Štetiar <ynezz at true.cz>

[0]: https://github.com/mikma/lxd-openwrt/blob/master/patches/procd-master/0003-docker-fix-problem-stopping-container.patch

Signed-off-by: Paul Spooren <mail at aparcar.org>
---
 state.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/state.c b/state.c
index ccf4104..b7cba88 100644
--- a/state.c
+++ b/state.c
@@ -20,6 +20,7 @@
 #include <sys/types.h>
 #include <signal.h>
 
+#include "container.h"
 #include "procd.h"
 #include "syslog.h"
 #include "plug/hotplug.h"
@@ -157,18 +158,22 @@ static void state_enter(void)
 		else
 			LOG("- reboot -\n");
 
-		/* Allow time for last message to reach serial console, etc */
-		sleep(1);
+		if(!is_container()) {
+			/* Allow time for last message to reach serial console, etc */
+			sleep(1);
 
-		/* We have to fork here, since the kernel calls do_exit(EXIT_SUCCESS)
-		 * in linux/kernel/sys.c, which can cause the machine to panic when
-		 * the init process exits... */
-		if (!vfork( )) { /* child */
-			reboot(reboot_event);
-			_exit(EXIT_SUCCESS);
+			/* We have to fork here, since the kernel calls do_exit(EXIT_SUCCESS)
+			 * in linux/kernel/sys.c, which can cause the machine to panic when
+			 * the init process exits... */
+			if (!vfork( )) { /* child */
+				reboot(reboot_event);
+				_exit(EXIT_SUCCESS);
+			}
+			while (1)
+				sleep(1);
+		} else {
+			exit(0);
 		}
-		while (1)
-			sleep(1);
 #else
 		exit(0);
 #endif
-- 
2.20.1


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list