Blame SOURCES/0004-util-watchdog-fixed-watchdog-implementation.patch

0d097b
From 2c13d8bd00f1e8ff30e9fc81f183f6450303ac30 Mon Sep 17 00:00:00 2001
0d097b
From: Alexey Tikhonov <atikhono@redhat.com>
0d097b
Date: Wed, 11 Dec 2019 18:42:49 +0100
0d097b
Subject: [PATCH] util/watchdog: fixed watchdog implementation
0d097b
0d097b
In case watchdog detected locked process and this process was parent
0d097b
process it just sent SIGTERM to the whole group of processes, including
0d097b
itself.
0d097b
This handling was wrong: generic `server_setup()` installs custom
0d097b
libtevent handler for SIGTERM signal so this signal is only processed
0d097b
in the context of tevent mainloop. But if tevent mainloop is stuck
0d097b
(exactly the case that triggers WD) then event is not processed
0d097b
and this made watchdog useless.
0d097b
`watchdog_handler()` and `watchdog_detect_timeshift()` were amended to do
0d097b
unconditional `_exit()` after optionally sending a signal to the group.
0d097b
0d097b
Resolves: https://pagure.io/SSSD/sssd/issue/4089
0d097b
0d097b
Reviewed-by: Sumit Bose <sbose@redhat.com>
0d097b
---
0d097b
 src/util/util_watchdog.c | 6 ++----
0d097b
 1 file changed, 2 insertions(+), 4 deletions(-)
0d097b
0d097b
diff --git a/src/util/util_watchdog.c b/src/util/util_watchdog.c
0d097b
index a07275b19..38c248271 100644
0d097b
--- a/src/util/util_watchdog.c
0d097b
+++ b/src/util/util_watchdog.c
0d097b
@@ -54,9 +54,8 @@ static void watchdog_detect_timeshift(void)
0d097b
         if (write(watchdog_ctx.pipefd[1], "1", 1) != 1) {
0d097b
             if (getpid() == getpgrp()) {
0d097b
                 kill(-getpgrp(), SIGTERM);
0d097b
-            } else {
0d097b
-                _exit(1);
0d097b
             }
0d097b
+            _exit(1);
0d097b
         }
0d097b
     }
0d097b
 }
0d097b
@@ -75,9 +74,8 @@ static void watchdog_handler(int sig)
0d097b
     if (__sync_add_and_fetch(&watchdog_ctx.ticks, 1) > WATCHDOG_MAX_TICKS) {
0d097b
         if (getpid() == getpgrp()) {
0d097b
             kill(-getpgrp(), SIGTERM);
0d097b
-        } else {
0d097b
-            _exit(1);
0d097b
         }
0d097b
+        _exit(1);
0d097b
     }
0d097b
 }
0d097b
 
0d097b
-- 
0d097b
2.20.1
0d097b