X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=watchdog.c;h=d927c53f42672734bd63706f46a5a7ddaa8c4aa4;hb=0a5f43565309fc6cad3d47fd6ad12dc368677d10;hp=2a516b4c5e0271489cd4f0f79763165e71aafb44;hpb=b9fcb589a4c086d786891f13dfececcfabc0c91f;p=project%2Fprocd.git diff --git a/watchdog.c b/watchdog.c index 2a516b4..d927c53 100644 --- a/watchdog.c +++ b/watchdog.c @@ -91,24 +91,29 @@ char* watchdog_fd(void) return fd_buf; } -void watchdog_init(void) +void watchdog_init(int preinit) { char *env = getenv("WDTFD"); + if (wdt_fd >= 0) + return; + 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; + + if (!preinit) + fcntl(wdt_fd, F_SETFD, fcntl(wdt_fd, F_GETFD) | FD_CLOEXEC); + + LOG("- watchdog -\n"); watchdog_timeout(30); watchdog_timeout_cb(&wdt_timeout);