diff options
-rw-r--r-- | doc/s6-svlisten.html | 2 | ||||
-rw-r--r-- | doc/s6-svwait.html | 2 | ||||
-rw-r--r-- | src/supervision/s6-svlisten.c | 4 | ||||
-rw-r--r-- | src/supervision/s6-svwait.c | 2 |
4 files changed, 7 insertions, 3 deletions
diff --git a/doc/s6-svlisten.html b/doc/s6-svlisten.html index 8fdbc88..96d3f74 100644 --- a/doc/s6-svlisten.html +++ b/doc/s6-svlisten.html @@ -52,6 +52,8 @@ their state changes. </li> <li> It spawns <em>prog...</em> as a child right after getting the initial state of all the monitored services. </li> <li> It then blocks until the wanted state happens. </li> + <li> If no service directories are listed (the block is empty), then +instead of doing all that, it immediately execs into <em>prog...</em>. </ul> <h2> Exit codes </h2> diff --git a/doc/s6-svwait.html b/doc/s6-svwait.html index 553201b..daa497f 100644 --- a/doc/s6-svwait.html +++ b/doc/s6-svwait.html @@ -35,7 +35,7 @@ s6-svwait only waits for notifications; it never polls. <p> s6-svwait monitors one or more <a href="servicedir.html">service directories</a> given as its arguments, waiting for a state (ready, up or down) to -happen. +happen. If no service directories are listed, it immediately exits 0. </p> <h2> Exit codes </h2> diff --git a/src/supervision/s6-svlisten.c b/src/supervision/s6-svlisten.c index 205a382..2ab1d9b 100644 --- a/src/supervision/s6-svlisten.c +++ b/src/supervision/s6-svlisten.c @@ -9,6 +9,7 @@ #include <skalibs/strerr.h> #include <skalibs/djbunix.h> #include <skalibs/selfpipe.h> +#include <skalibs/exec.h> #include <s6/compat.h> #include "s6-svlisten.h" @@ -49,8 +50,9 @@ int main (int argc, char const **argv, char const *const *envp) } if (argc < 3) dieusage() ; argc1 = s6_el_semicolon(argv) ; - if (!argc1 || argc == argc1 + 1) dieusage() ; + if (argc == argc1 + 1) dieusage() ; if (argc1 >= argc) strerr_dief1x(100, "unterminated servicedir block") ; + if (!argc1) xexec(argv + argc1 + 1) ; if (wantup == 2 && or) { or = 0 ; diff --git a/src/supervision/s6-svwait.c b/src/supervision/s6-svwait.c index 2c7a312..78f5c3f 100644 --- a/src/supervision/s6-svwait.c +++ b/src/supervision/s6-svwait.c @@ -45,7 +45,7 @@ int main (int argc, char const *const *argv) argc -= l.ind ; argv += l.ind ; if (t) tain_from_millisecs(&deadline, t) ; else deadline = tain_infinite_relative ; } - if (!argc) dieusage() ; + if (!argc) return 0 ; tain_now_set_stopwatch_g() ; tain_add_g(&deadline, &deadline) ; |