diff options
author | June McEnroe <june@causal.agency> | 2020-08-14 17:44:27 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-08-14 17:44:27 -0400 |
commit | 04ca84acdabc55ce20cb03b5c4ca703ab0c14b4d (patch) | |
tree | d56a4f1a7e3881d2dcd6fe55a556a7237560b62d | |
parent | Implement serviceStart (diff) | |
download | catsit-04ca84acdabc55ce20cb03b5c4ca703ab0c14b4d.tar.gz catsit-04ca84acdabc55ce20cb03b5c4ca703ab0c14b4d.zip |
Switch to timespec for timeouts
Can be passed to ppoll(2) directly.
-rw-r--r-- | daemon.c | 11 | ||||
-rw-r--r-- | daemon.h | 9 |
2 files changed, 13 insertions, 7 deletions
diff --git a/daemon.c b/daemon.c index d0a6579..3dc0640 100644 --- a/daemon.c +++ b/daemon.c @@ -27,6 +27,7 @@ #include <stdlib.h> #include <string.h> #include <sys/stat.h> +#include <sys/timespec.h> #include <sysexits.h> #include <syslog.h> #include <unistd.h> @@ -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 <stdint.h> #include <stdlib.h> #include <string.h> -#include <sys/time.h> +#include <sys/timespec.h> #include <unistd.h> 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; |