[c5c522c] | 1 | --- /tmp/supervise.c 2001-07-12 16:49:49.000000000 +0000 |
---|
| 2 | +++ admin/daemontools-0.76/src/supervise.c 2004-12-07 16:34:29.000000000 +0000 |
---|
| 3 | @@ -15,7 +15,11 @@ |
---|
| 4 | #include "iopause.h" |
---|
| 5 | #include "taia.h" |
---|
| 6 | #include "deepsleep.h" |
---|
| 7 | +//syn3 protection mechanism (C)zah Drent |
---|
| 8 | +#include "timesaver.h" |
---|
| 9 | |
---|
| 10 | +//DatuX hack ivm time checker getal bevat seconden |
---|
| 11 | +#define MaxRefreshTime 3600 |
---|
| 12 | #define FATAL "supervise: fatal: " |
---|
| 13 | #define WARNING "supervise: warning: " |
---|
| 14 | |
---|
| 15 | @@ -111,34 +115,45 @@ |
---|
| 16 | |
---|
| 17 | void doit(void) |
---|
| 18 | { |
---|
| 19 | + |
---|
| 20 | iopause_fd x[2]; |
---|
| 21 | struct taia deadline; |
---|
| 22 | struct taia stamp; |
---|
| 23 | int wstat; |
---|
| 24 | int r; |
---|
| 25 | char ch; |
---|
| 26 | - |
---|
| 27 | + int bytes; |
---|
| 28 | announce(); |
---|
| 29 | - |
---|
| 30 | for (;;) { |
---|
| 31 | if (flagexit && !pid) return; |
---|
| 32 | - |
---|
| 33 | sig_unblock(sig_child); |
---|
| 34 | - |
---|
| 35 | x[0].fd = selfpipe[0]; |
---|
| 36 | x[0].events = IOPAUSE_READ; |
---|
| 37 | x[1].fd = fdcontrol; |
---|
| 38 | x[1].events = IOPAUSE_READ; |
---|
| 39 | taia_now(&stamp); |
---|
| 40 | - taia_uint(&deadline,3600); |
---|
| 41 | + taia_uint(&deadline,MaxRefreshTime); |
---|
| 42 | taia_add(&deadline,&stamp,&deadline); |
---|
| 43 | + |
---|
| 44 | + if (!(TimeCheck(0,NULL)) ) |
---|
| 45 | + { |
---|
| 46 | + //syn3 mag niet meer gebruikt worden, bovenstaand word genegeerd. |
---|
| 47 | + //verder gooien de service down als dat nog niet zo is |
---|
| 48 | + if (pid) |
---|
| 49 | + { |
---|
| 50 | + //dit stuk is een copy/paste van het bovenstaande 'd' commando :-D |
---|
| 51 | + flagwant = 1; |
---|
| 52 | + flagwantup = 0; |
---|
| 53 | + if (pid) { kill(pid,SIGTERM); kill(pid,SIGCONT); flagpaused = 0; } |
---|
| 54 | + announce(); |
---|
| 55 | + } |
---|
| 56 | + } |
---|
| 57 | + |
---|
| 58 | + //wacht totdat er nieuwe input is, OF op een timeout |
---|
| 59 | iopause(x,2,&deadline,&stamp); |
---|
| 60 | - |
---|
| 61 | sig_block(sig_child); |
---|
| 62 | - |
---|
| 63 | - while (read(selfpipe[0],&ch,1) == 1) |
---|
| 64 | - ; |
---|
| 65 | - |
---|
| 66 | + //kijk of de 'selfpipe' (wtf) data heeft |
---|
| 67 | + while (read(selfpipe[0],&ch,1) == 1) ; |
---|
| 68 | for (;;) { |
---|
| 69 | r = wait_nohang(&wstat); |
---|
| 70 | if (!r) break; |
---|
| 71 | @@ -152,8 +167,14 @@ |
---|
| 72 | break; |
---|
| 73 | } |
---|
| 74 | } |
---|
| 75 | - |
---|
| 76 | - if (read(fdcontrol,&ch,1) == 1) |
---|
| 77 | + //lees ALTIJD de control pipe (ivm opstoppingen) |
---|
| 78 | + bytes=read(fdcontrol,&ch,1); |
---|
| 79 | + |
---|
| 80 | + //mag syn3 gebruik worden (x mag altijd, ivm registratie)? |
---|
| 81 | + if (TimeCheck(0,NULL) || ch=='x') |
---|
| 82 | + { |
---|
| 83 | + //ja, dus handel alles af zoals normaal: |
---|
| 84 | + if (bytes == 1 ) |
---|
| 85 | switch(ch) { |
---|
| 86 | case 'd': |
---|
| 87 | flagwant = 1; |
---|
| 88 | @@ -202,6 +223,20 @@ |
---|
| 89 | announce(); |
---|
| 90 | break; |
---|
| 91 | } |
---|
| 92 | + } |
---|
| 93 | + else |
---|
| 94 | + { |
---|
| 95 | + //syn3 mag niet meer gebruikt worden, bovenstaand word genegeerd. |
---|
| 96 | + //verder gooien de service down als dat nog niet zo is |
---|
| 97 | + if (pid) |
---|
| 98 | + { |
---|
| 99 | + //dit stuk is een copy/paste van het bovenstaande 'd' commando :-D |
---|
| 100 | + flagwant = 1; |
---|
| 101 | + flagwantup = 0; |
---|
| 102 | + if (pid) { kill(pid,SIGTERM); kill(pid,SIGCONT); flagpaused = 0; } |
---|
| 103 | + announce(); |
---|
| 104 | + } |
---|
| 105 | + } |
---|
| 106 | } |
---|
| 107 | } |
---|
| 108 | |
---|
| 109 | @@ -257,9 +292,7 @@ |
---|
| 110 | if (fdok == -1) |
---|
| 111 | strerr_die4sys(111,FATAL,"unable to read ",dir,"/supervise/ok: "); |
---|
| 112 | coe(fdok); |
---|
| 113 | - |
---|
| 114 | if (!flagwant || flagwantup) trystart(); |
---|
| 115 | - |
---|
| 116 | doit(); |
---|
| 117 | announce(); |
---|
| 118 | _exit(0); |
---|