we need to daemonize *before* opening the watchdog device
No binary (build failed)
—
(log yok)
| @@ -45,6 +45,15 @@ int watchdog_main(int argc, char **argv) | |
| opt_complementary = "=1"; /* must have exactly 1 argument */ | |
| opts = getopt32(argv, "Ft:T:", &st_arg, &ht_arg); | |
| + | /* We need to daemonize *before* opening the watchdog as many drivers |
| + | * will only allow one process at a time to do so. Since daemonizing |
| + | * is not perfect (child may run before parent finishes exiting), we |
| + | * can't rely on parent exiting before us (let alone *cleanly* releasing |
| + | * the watchdog fd -- something else that may not even be allowed). |
| + | */ |
| + | if (!(opts & OPT_FOREGROUND)) |
| + | bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv); |
| + | |
| if (opts & OPT_HTIMER) | |
| htimer_duration = xatou_sfx(ht_arg, suffixes); | |
| stimer_duration = htimer_duration / 2; | |
| @@ -76,10 +85,6 @@ int watchdog_main(int argc, char **argv) | |
| stimer_duration, htimer_duration * 1000); | |
| #endif | |
| - | if (!(opts & OPT_FOREGROUND)) { |
| - | bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv); |
| - | } |
| - | |
| while (1) { | |
| /* | |
| * Make sure we clear the counter before sleeping, | |