diff options
-rw-r--r-- | state.c | 3 | ||||
-rw-r--r-- | watchdog.c | 7 |
2 files changed, 6 insertions, 4 deletions
@@ -46,6 +46,9 @@ static void state_enter(void) break; case STATE_INIT: + // check if the wdt appeared during coldplug + if (!watchdog_fd()) + watchdog_init(); LOG("- init -\n"); log_init(); procd_connect_ubus(); @@ -95,20 +95,19 @@ void watchdog_init(void) { char *env = getenv("WDTFD"); + wdt_timeout.cb = watchdog_timeout_cb; if (env) { - LOG("- watchdog -\n"); DEBUG(1, "Watchdog handover: fd=%s\n", env); wdt_fd = atoi(env); - fcntl(wdt_fd, F_SETFD, fcntl(wdt_fd, F_GETFD) | FD_CLOEXEC); unsetenv("WDTFD"); } else { wdt_fd = open("/dev/watchdog", O_WRONLY); - if (getpid() != 1) - fcntl(wdt_fd, F_SETFD, fcntl(wdt_fd, F_GETFD) | FD_CLOEXEC); } if (wdt_fd < 0) return; + fcntl(wdt_fd, F_SETFD, fcntl(wdt_fd, F_GETFD) | FD_CLOEXEC); + LOG("- watchdog -\n"); watchdog_timeout(30); watchdog_timeout_cb(&wdt_timeout); |