From 0ca3c5c1038945877fad25916a3e32395b9aeaa9 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Fri, 14 Aug 2020 17:50:54 -0400 Subject: Reset restartInterval and restartDeadline on start --- service.c | 18 +++++++++++++++--- 1 file 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 #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; -- cgit 1.4.1