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; |