summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Olbrich <m.olbrich@pengutronix.de>2013-01-23 14:12:16 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-01-24 19:36:47 -0500
commit90527fbb2c48ffda5c6d8f232f8993a90b2632a4 (patch)
tree4c53c1ebb2be714cdc14e7f8b0f8ce8e10444c20
parent6d594baa3fa3a361efc2a4c1da3557fc4eba960d (diff)
service: make sure the watchdog timer is not restarted while stopping
A watchdog notification may be handled after the watchdog timer was stopped while stopping the service. As a result the timer is restarted and the service may be restarted as well. The watchdog timestamp is initially set during startup in service_enter_start_post() and cleared when the timer is stopped. Therefore it can be used as an indication if the timer should be reset.
-rw-r--r--src/core/service.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/core/service.c b/src/core/service.c
index 593946e517..baddc5ade4 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -3400,7 +3400,8 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
if (strv_find(tags, "WATCHDOG=1")) {
log_debug_unit(u->id,
"%s: got WATCHDOG=1", u->id);
- service_reset_watchdog(s);
+ if (dual_timestamp_is_set(&s->watchdog_timestamp))
+ service_reset_watchdog(s);
}
/* Notify clients about changed status or main pid */