From: John Crispin Date: Wed, 10 Jul 2013 12:10:39 +0000 (+0200) Subject: fix up watchdog init code X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fprocd.git;a=commitdiff_plain;h=89eec0d61e15bd3c3cd83d24a17fa5894ae984c1 fix up watchdog init code Signed-off-by: John Crispin --- diff --git a/state.c b/state.c index cf0c81d..71890a2 100644 --- a/state.c +++ b/state.c @@ -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(); diff --git a/watchdog.c b/watchdog.c index 2a516b4..e4b82f5 100644 --- a/watchdog.c +++ b/watchdog.c @@ -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);