diff options
author | Michal Schmidt <mschmidt@redhat.com> | 2015-09-30 15:12:19 +0200 |
---|---|---|
committer | Michal Schmidt <mschmidt@redhat.com> | 2015-10-07 14:24:49 +0200 |
commit | 4cf0b03b976dd7050595f835092b551623468dbe (patch) | |
tree | 32134dd2982ff2a688cfd6f4a216b359c19f7b02 | |
parent | 647cb08bc3d5da8a923d055612f558cb6b61e303 (diff) |
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.
-rw-r--r-- | man/systemd.xml | 5 | ||||
-rw-r--r-- | 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 <option>no</option>, in order to avoid a reboot loop. If - combined with <varname>systemd.crash_shell=</varname>, it is - first attempted to invoke a shell, and if this is not - successful the system is rebooted.</para></listitem> + combined with <varname>systemd.crash_shell=</varname>, the + system is rebooted after the shell exits.</para></listitem> </varlistentry> <varlistentry> 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); } } |