From: Michal Schmidt Date: Wed, 30 Sep 2015 13:12:19 +0000 (+0200) Subject: core: change how crash_shell and crash_reboot interact X-Git-Tag: v227~11^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4cf0b03b976dd7050595f835092b551623468dbe;p=thirdparty%2Fsystemd.git core: change how crash_shell and crash_reboot interact Instead of freezing in PID1 and letting the forked child freeze or reboot when exec("/bin/sh") fails, just wait for the child's exit and then do the freeze_or_reboot in PID1 as usual. This means that when both crash_shell and crash_reboot are enabled, the system will reboot after the shell exits. --- diff --git a/man/systemd.xml b/man/systemd.xml index 391333bfb46..8d74ca49c3f 100644 --- a/man/systemd.xml +++ b/man/systemd.xml @@ -922,9 +922,8 @@ the machine automatically when it crashes, after a 10s delay. Otherwise, the system will hang indefinitely. Defaults to , in order to avoid a reboot loop. If - combined with systemd.crash_shell=, it is - first attempted to invoke a shell, and if this is not - successful the system is rebooted. + combined with systemd.crash_shell=, the + system is rebooted after the shell exits. diff --git a/src/core/main.c b/src/core/main.c index 2fa96901c7d..13fa78fed8a 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -231,11 +231,10 @@ noreturn static void crash(int sig) { (void) execle("/bin/sh", "/bin/sh", NULL, environ); log_emergency_errno(errno, "execle() failed: %m"); - freeze_or_reboot(); _exit(EXIT_FAILURE); } else { log_info("Spawned crash shell as PID "PID_FMT".", pid); - freeze(); + (void) wait_for_terminate(pid, NULL); } }