From 0cf84c9a60eb833252c77ab96ef2d4f094f39dc1 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 17 Aug 2025 01:00:37 +0900 Subject: [PATCH] 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 25178aadb2bd04ef9e63f48c1ef42fb309f9332e. Fixes #38551 (the second failure case). --- src/core/service.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/core/service.c b/src/core/service.c index 4f8eaf40518..d94162ead0b 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -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); } -- 2.47.3