Mercurial > hg > toybox
changeset 330:2a003d86d805
Teach oneit to reboot on exit more reliably.
author | Rob Landley <rob@landley.net> |
---|---|
date | Sun, 14 Dec 2008 02:12:07 -0600 |
parents | 6773399539aa |
children | 9de39991c080 |
files | toys/oneit.c |
diffstat | 1 files changed, 6 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/toys/oneit.c Sun Dec 14 01:08:37 2008 -0600 +++ b/toys/oneit.c Sun Dec 14 02:12:07 2008 -0600 @@ -58,7 +58,12 @@ // pid 1 just reaps zombies until it gets its child, then halts the system. while (pid!=wait(&i)); sync(); - reboot(toys.optflags ? RB_POWER_OFF : RB_AUTOBOOT); + + // PID 1 can't call reboot() because it kills the task that calls it, + // which causes the kernel to panic before the actual reboot happens. + if (!vfork()) reboot((toys.optflags&1) ? RB_POWER_OFF : RB_AUTOBOOT); + sleep(5); + _exit(1); } // Redirect stdio to /dev/tty0, with new session ID, so ctrl-c works.