summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-xetc/macosx/StartupItems/runit2
-rw-r--r--package/CHANGES5
-rw-r--r--src/runsvdir.c32
3 files changed, 22 insertions, 17 deletions
diff --git a/etc/macosx/StartupItems/runit b/etc/macosx/StartupItems/runit
index 99b0178..916d769 100755
--- a/etc/macosx/StartupItems/runit
+++ b/etc/macosx/StartupItems/runit
@@ -12,7 +12,7 @@ StartService() {
 }
 StopService() {
   ConsoleMessage "Stopping runit service supervision"
-  svwaitdown -k -t34 /var/service/*
+  svwaitdown -xk -t14 /var/service/*
 }
 RestartService() {
   return 0
diff --git a/package/CHANGES b/package/CHANGES
index 055b35f..85db36c 100644
--- a/package/CHANGES
+++ b/package/CHANGES
@@ -3,7 +3,10 @@ Sun, 01 Aug 2004 18:29:36 +0000
   * doc/runlevels.html, doc/upgrade.html, doc/useinit.html, man/runsvdir.8,
     man/runsvchdir.8: minor changes in wording, notations.
   * runsvdir.c: check services dir again after one second until it's
-    unchanged (thx Eric Lammerts); loop while chdir to starting dir fails.
+    unchanged (thx Eric Lammerts); sleep one second before scanning if
+    services dir mtime is now; loop while chdir to starting dir fails;
+    rename log, loglen to rplog, rploglen.
+  * etc/macosx/StartupItems/runit: use -x option to svwaitdown; timeout 14.
 
 runit 1.0.3
 Sat, 26 Jun 2004 14:50:41 +0000
diff --git a/src/runsvdir.c b/src/runsvdir.c
index 8927dd0..2faa3df 100644
--- a/src/runsvdir.c
+++ b/src/runsvdir.c
@@ -33,8 +33,8 @@ struct {
 } sv[MAXSERVICES];
 int svnum =0;
 int check =1;
-char *log =0;
-int loglen;
+char *rplog =0;
+int rploglen;
 int logpipe[2];
 iopause_fd io[1];
 struct taia stamplog;
@@ -67,7 +67,7 @@ void runsv(int no, char *name) {
     prog[0] ="runsv";
     prog[1] =name;
     prog[2] =0;
-    if (log)
+    if (rplog)
       if (fd_move(2, logpipe[1]) == -1)
 	warn("unable to set filedescriptor for log service", 0);
     sig_uncatch(sig_hangup);
@@ -138,7 +138,7 @@ void runsvdir() {
 }
 
 int setup_log() {
-  if ((loglen =str_len(log)) < 7) {
+  if ((rploglen =str_len(rplog)) < 7) {
     warn3x("log must have at least seven characters.", 0, 0);
     return(0);
   }
@@ -179,9 +179,9 @@ int main(int argc, char **argv) {
   sig_catch(sig_hangup, s_hangup);
   svdir =*argv++;
   if (argv && *argv) {
-    log =*argv;
+    rplog =*argv;
     if (setup_log() != 1) {
-      log =0;
+      rplog =0;
       warn3x("log service disabled.", 0, 0);
     }
   }
@@ -211,7 +211,7 @@ int main(int argc, char **argv) {
       warn3x("time warp: resetting time stamp.", 0, 0);
       taia_now(&stampcheck);
       taia_now(&now);
-      if (log) taia_now(&stamplog);
+      if (rplog) taia_now(&stamplog);
     }
     if (taia_less(&now, &stampcheck) == 0) {
       /* wait at least a second */
@@ -227,6 +227,8 @@ int main(int argc, char **argv) {
 	    dev =s.st_dev;
 	    ino =s.st_ino;
 	    check =0;
+	    if (now.sec.x <= (4611686018427387914ULL +(uint64)mtime))
+	      sleep(1);
 	    runsvdir();
 	    while (fchdir(curdir) == -1) {
 	      warn("unable to change directory, pausing", 0);
@@ -241,7 +243,7 @@ int main(int argc, char **argv) {
 	warn("unable to stat ", svdir);
     }
 
-    if (log)
+    if (rplog)
       if (taia_less(&now, &stamplog) == 0) {
 	write(logpipe[1], ".", 1);
 	taia_uint(&deadline, 900);
@@ -251,20 +253,20 @@ int main(int argc, char **argv) {
     taia_add(&deadline, &now, &deadline);
 
     sig_block(sig_child);
-    if (log)
+    if (rplog)
       iopause(io, 1, &deadline, &now);
     else
       iopause(0, 0, &deadline, &now);
     sig_unblock(sig_child);
 
-    if (log && (io[0].revents | IOPAUSE_READ))
-      while (read(logpipe[0], &ch, 1) > 0) {
+    if (rplog && (io[0].revents | IOPAUSE_READ))
+      while (read(logpipe[0], &ch, 1) > 0)
 	if (ch) {
-	  for (i =6; i < loglen; i++)
-	    log[i -1] =log[i];
-	  log[loglen -1] =ch;
+	  for (i =6; i < rploglen; i++)
+	    rplog[i -1] =rplog[i];
+	  rplog[rploglen -1] =ch;
 	}
-      }
+
     switch(exitsoon) {
     case 1:
       _exit(0);