diff options
author | June McEnroe <june@causal.agency> | 2020-08-14 17:50:54 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-08-14 17:55:01 -0400 |
commit | 0ca3c5c1038945877fad25916a3e32395b9aeaa9 (patch) | |
tree | d77e4650d58216f60e21c2cf05ea1c60a246a7dc | |
parent | Switch to timespec for timeouts (diff) | |
download | catsit-0ca3c5c1038945877fad25916a3e32395b9aeaa9.tar.gz catsit-0ca3c5c1038945877fad25916a3e32395b9aeaa9.zip |
Reset restartInterval and restartDeadline on start
Diffstat (limited to '')
-rw-r--r-- | service.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/service.c b/service.c index 3472151..ef4834a 100644 --- a/service.c +++ b/service.c @@ -22,7 +22,9 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <sys/time.h> #include <syslog.h> +#include <time.h> #include <unistd.h> #include "daemon.h" @@ -107,14 +109,24 @@ err: void serviceStart(struct Service *service) { if (service->state == Start) return; - service->intent = Start; - // TODO: Reset restart interval. + if (service->intent == Start) { + struct timespec backoff = service->restartInterval; + timespecadd(&backoff, &backoff, &service->restartInterval); + } else { + service->restartInterval = restartInterval; + } + clock_gettime(CLOCK_MONOTONIC_FAST, &service->restartDeadline); + timespecadd( + &service->restartDeadline, &service->restartInterval, + &service->restartDeadline + ); + + service->intent = Start; service->pid = fork(); if (service->pid < 0) { syslog(LOG_ERR, "fork: %m"); return; - // FIXME: Do we treat this as a restart condition? } if (service->pid) { service->state = Start; |