Date: Mon, 20 Apr 2020 16:31:05 +0000 (UTC) From: Alexander Motin <mav@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r360128 - stable/12/usr.sbin/daemon Message-ID: <202004201631.03KGV5pX082715@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mav Date: Mon Apr 20 16:31:05 2020 New Revision: 360128 URL: https://svnweb.freebsd.org/changeset/base/360128 Log: MFC r348629 (by cem): 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.) Modified: stable/12/usr.sbin/daemon/daemon.c Directory Properties: stable/12/ (props changed) Modified: stable/12/usr.sbin/daemon/daemon.c ============================================================================== --- stable/12/usr.sbin/daemon/daemon.c Mon Apr 20 16:21:37 2020 (r360127) +++ stable/12/usr.sbin/daemon/daemon.c Mon Apr 20 16:31:05 2020 (r360128) @@ -359,12 +359,13 @@ restart: } } } + 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"); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202004201631.03KGV5pX082715>