]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/service: do not reset watchdong when unit is frozen
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 16 Aug 2025 16:00:37 +0000 (01:00 +0900)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 3 Sep 2025 10:10:48 +0000 (12:10 +0200)
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).

(cherry picked from commit 0cf84c9a60eb833252c77ab96ef2d4f094f39dc1)

src/core/service.c

index 25ccff1975fedff2fb8264a554d1d43348d5dc5b..0f7f76869c265dc4514f221da17526de9646d139 100644 (file)
@@ -408,6 +408,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);
 }