--- a/initd/init.c +++ b/initd/init.c @@ -34,6 +34,7 @@ #include "../watchdog.h" unsigned int debug = 0; +pid_t gKmodLoaderPid; static void signal_shutdown(int signal, siginfo_t *siginfo, void *data) @@ -104,15 +105,9 @@ main(int argc, char **argv) if (pid <= 0) { ERROR("Failed to start kmodloader instance\n"); } else { - int i; - - for (i = 0; i < 120; i++) { - if (waitpid(pid, NULL, WNOHANG) > 0) - break; - sleep(1); - watchdog_ping(); - } + gKmodLoaderPid = pid; } + uloop_init(); preinit(); uloop_run(); --- a/initd/preinit.c +++ b/initd/preinit.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -29,6 +30,7 @@ static struct uloop_process preinit_proc; static struct uloop_process plugd_proc; +extern pid_t gKmodLoaderPid; static void check_dbglvl(void) @@ -62,6 +64,15 @@ spawn_procd(struct uloop_process *proc, while (true) sleep(1); + if(gKmodLoaderPid != 0) { + int i; + for (i = 0; i < 120; i++) { + if (waitpid(gKmodLoaderPid, NULL, WNOHANG) > 0) + break; + usleep(10000); + watchdog_ping(); + } + } unsetenv("INITRAMFS"); unsetenv("PREINIT"); DEBUG(2, "Exec to real procd now\n"); --- a/plug/hotplug.c +++ b/plug/hotplug.c @@ -33,7 +33,7 @@ #include "hotplug.h" -#define HOTPLUG_WAIT 500 +#define HOTPLUG_WAIT 50 struct cmd_handler; struct cmd_queue { --- a/state.c +++ b/state.c @@ -166,14 +166,14 @@ static void state_enter(void) LOG("- SIGKILL processes -\n"); kill(-1, SIGKILL); sync(); - sleep(1); + usleep(500000); if (reboot_event == RB_POWER_OFF) LOG("- power down -\n"); else LOG("- reboot -\n"); /* Allow time for last message to reach serial console, etc */ - sleep(1); + //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 --- a/ubus.c +++ b/ubus.c @@ -46,7 +46,7 @@ ubus_connect_cb(struct uloop_timeout *ti if (!ctx) { DEBUG(4, "Connection to ubus failed\n"); - uloop_timeout_set(&ubus_timer, 1000); + uloop_timeout_set(&ubus_timer, 50); return; } @@ -64,5 +64,5 @@ void procd_connect_ubus(void) { ubus_timer.cb = ubus_connect_cb; - uloop_timeout_set(&ubus_timer, 1000); + uloop_timeout_set(&ubus_timer, 50); }