Reset restartInterval and restartDeadline on start
This commit is contained in:
parent
04ca84acda
commit
0ca3c5c103
18
service.c
18
service.c
@ -22,7 +22,9 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sys/time.h>
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "daemon.h"
|
#include "daemon.h"
|
||||||
@ -107,14 +109,24 @@ err:
|
|||||||
|
|
||||||
void serviceStart(struct Service *service) {
|
void serviceStart(struct Service *service) {
|
||||||
if (service->state == Start) return;
|
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();
|
service->pid = fork();
|
||||||
if (service->pid < 0) {
|
if (service->pid < 0) {
|
||||||
syslog(LOG_ERR, "fork: %m");
|
syslog(LOG_ERR, "fork: %m");
|
||||||
return;
|
return;
|
||||||
// FIXME: Do we treat this as a restart condition?
|
|
||||||
}
|
}
|
||||||
if (service->pid) {
|
if (service->pid) {
|
||||||
service->state = Start;
|
service->state = Start;
|
||||||
|
Loading…
Reference in New Issue
Block a user