From: Lennart Poettering Date: Tue, 3 Jul 2012 22:23:42 +0000 (+0200) Subject: service: flush the start counter in "systemctl reset-failed" X-Git-Tag: v187~167 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=451b34cc1d74960ee0262eef970a6346ec814f31 service: flush the start counter in "systemctl reset-failed" --- diff --git a/man/systemd.service.xml b/man/systemd.service.xml index 60155e68c..fcd3a7dd3 100644 --- a/man/systemd.service.xml +++ b/man/systemd.service.xml @@ -768,7 +768,15 @@ however they may still be restarted manually at a later point from which point on the restart logic is again - activated. + activated. Note that + systemctl + reset-failed will cause the + restart rate counter for a service to + be flushed, which is useful if the + administrator wants to manually start + a service and the start limit + interferes with + that. diff --git a/src/core/service.c b/src/core/service.c index d82803db2..0c29d4aef 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -3655,6 +3655,8 @@ static void service_reset_failed(Unit *u) { s->result = SERVICE_SUCCESS; s->reload_result = SERVICE_SUCCESS; + + RATELIMIT_RESET(s->start_limit); } static int service_kill(Unit *u, KillWho who, KillMode mode, int signo, DBusError *error) { diff --git a/src/shared/ratelimit.h b/src/shared/ratelimit.h index 07e8205c8..ad00267a6 100644 --- a/src/shared/ratelimit.h +++ b/src/shared/ratelimit.h @@ -48,6 +48,13 @@ typedef struct RateLimit { _r->begin = 0; \ } while (false) +#define RATELIMIT_RESET(v) \ + do { \ + RateLimit *_r = &(v); \ + _r->num = 0; \ + _r->begin = 0; \ + } while (false) + bool ratelimit_test(RateLimit *r); #endif