core/service: do not reset watchdong when unit is frozen
Even watchdog for a service is stopped when freezing the unit is
requested, sd-notify message WATCHDOG=1 or friends may come after
that due to ordering of event priority. In that case,
service_reset_watchdog() is called for frozen unit and thus previously
watchdog was reenabled.
Follow-up for 25178aadb2.
Fixes #38551 (the second failure case).
This commit is contained in:
@@ -414,6 +414,12 @@ static void service_extend_timeout(Service *s, usec_t extend_timeout_usec) {
|
||||
static void service_reset_watchdog(Service *s) {
|
||||
assert(s);
|
||||
|
||||
if (freezer_state_finish(UNIT(s)->freezer_state) != FREEZER_RUNNING) {
|
||||
log_unit_debug(UNIT(s), "Service is currently %s, skipping resetting watchdog.",
|
||||
freezer_state_to_string(UNIT(s)->freezer_state));
|
||||
return;
|
||||
}
|
||||
|
||||
dual_timestamp_now(&s->watchdog_timestamp);
|
||||
service_start_watchdog(s);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user