diff --git a/daemon.c b/daemon.c index d0a6579..3dc0640 100644 --- a/daemon.c +++ b/daemon.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -43,7 +44,7 @@ #define WS " \t" -int restartInterval = 1000; +struct timespec restartInterval = { .tv_sec = 1 }; struct Set256 stopExits; static void configerr(bool exit, const char *format, ...) { @@ -119,6 +120,12 @@ static void parseExits(char *list) { } } +static void parseInterval(const char *millis) { + unsigned long ms = strtoul(millis, NULL, 10); + restartInterval.tv_sec = ms / 1000; + restartInterval.tv_nsec = 1000000 * (ms % 1000); +} + int main(int argc, char *argv[]) { setprogname(argv[0]); @@ -146,7 +153,7 @@ int main(int argc, char *argv[]) { break; case 'g': groupName = optarg; break; case 'p': pidPath = optarg; break; case 's': parseExits(optarg); - break; case 't': restartInterval = strtoul(optarg, NULL, 10); + break; case 't': parseInterval(optarg); break; case 'u': userName = optarg; break; default: return EX_USAGE; } diff --git a/daemon.h b/daemon.h index 09cda47..32827aa 100644 --- a/daemon.h +++ b/daemon.h @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include typedef unsigned char byte; @@ -85,8 +85,8 @@ struct Service { int errPipe[2]; struct Line outLine; struct Line errLine; - int restartInterval; - struct timeval restartTime; + struct timespec restartInterval; + struct timespec restartDeadline; }; extern struct Services { @@ -100,8 +100,6 @@ void serviceStart(struct Service *service); extern char configError[]; int configParse(const char *path); -extern int restartInterval; - struct Set256 { uint32_t bits[8]; }; @@ -117,3 +115,4 @@ static inline uint32_t setTest(const struct Set256 *set, byte x) { enum { StopExit = 127 }; extern struct Set256 stopExits; +extern struct timespec restartInterval;