It has been observed that, very rarely, the system does not reboot
when procd enters the shutdown state. Busybox seems to have an
obscure fix in its shutdown, where the parent (procd) process
is put in an infinite loop, and a special child is executed to
execute reboot(). This may very well be the cause.

Signed-off-by: Michel Stam <m.s...@fugro.nl>
---
 state.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/state.c b/state.c
index 05f7dc5..e6c8712 100644
--- a/state.c
+++ b/state.c
@@ -86,7 +86,20 @@ static void state_enter(void)
                sync();
                sleep(1);
                LOG("- reboot -\n");
-               reboot(reboot_event);
+
+               /* 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);
                break;
 
        default:
-- 
1.7.12.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to