daemon(8): Don't block SIGTERM during restart delay
I believe this was introduced in the original '-r' commit, r231911 (2012). At the time, the scope was limited to a 1 second sleep. r332518 (2018) added '-R', which increased the potential duration of the affected interval (from 1 to N seconds) by permitting arbitrary restart intervals. Instead, handle SIGTERM normally during restart-sleep, when the monitored process is not running, and shut down promptly. (I noticed this behavior when debugging a child process that exited quickly under the 'daemon -r -R 30' environment. 'kill <daemonpid>' had no immediate effect and the monitor process slept until the next restart attempt. This was annoying.) Reviewed by: allanjude, imp, markj Differential Revision: https://reviews.freebsd.org/D20509
This commit is contained in:
parent
5ae3d73fb8
commit
175ae3661a
@ -359,12 +359,13 @@ main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
}
|
||||
if (restart && !terminate)
|
||||
daemon_sleep(restart, 0);
|
||||
if (sigprocmask(SIG_BLOCK, &mask_term, NULL)) {
|
||||
warn("sigprocmask");
|
||||
goto exit;
|
||||
}
|
||||
if (restart && !terminate) {
|
||||
daemon_sleep(restart, 0);
|
||||
close(pfd[0]);
|
||||
pfd[0] = -1;
|
||||
goto restart;
|
||||
@ -384,7 +385,8 @@ static void
|
||||
daemon_sleep(time_t secs, long nsecs)
|
||||
{
|
||||
struct timespec ts = { secs, nsecs };
|
||||
while (nanosleep(&ts, &ts) == -1) {
|
||||
|
||||
while (!terminate && nanosleep(&ts, &ts) == -1) {
|
||||
if (errno != EINTR)
|
||||
err(1, "nanosleep");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user