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:
Yu Watanabe
2025-08-17 05:19:26 +09:00
parent e7d811d611
commit 0cf84c9a60
+6
View File
@@ -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);
}