From 4cf0b03b976dd7050595f835092b551623468dbe Mon Sep 17 00:00:00 2001 From: Michal Schmidt Date: Wed, 30 Sep 2015 15:12:19 +0200 Subject: 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. --- man/systemd.xml | 5 ++--- src/core/main.c | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/man/systemd.xml b/man/systemd.xml index 391333bfb4..8d74ca49c3 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 2fa96901c7..13fa78fed8 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); } } -- cgit v1.2.3-54-g00ecf