From 832369078d818d19ab64051fdc8da9e06c90ad88 Mon Sep 17 00:00:00 2001 From: Paul Spooren Date: Mon, 5 Aug 2019 18:07:45 +0200 Subject: [PATCH] state: fix shutdown when running in a container (FS#2425) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Applies patch from @mikma [0] to fix Docker shutdown. Added detection to state.c if running in a container or not. Tested with a x86/64 Docker image. Fixes FS#2425 CC: Mikael Magnusson CC: Petr Å tetiar [0]: https://github.com/mikma/lxd-openwrt/blob/master/patches/procd-master/0003-docker-fix-problem-stopping-container.patch Signed-off-by: Paul Spooren Signed-off-by: Hans Dedecker [coding style aligment] --- state.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/state.c b/state.c index ccf4104..4737d01 100644 --- a/state.c +++ b/state.c @@ -20,6 +20,7 @@ #include #include +#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); - - /* 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) + 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); + } + + while (1) + sleep(1); + } else + exit(0); #else exit(0); #endif -- 2.30.2