diff --git a/service.c b/service.c index 3472151..ef4834a 100644 --- a/service.c +++ b/service.c @@ -22,7 +22,9 @@ #include #include #include +#include #include +#include #include #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;