File 0040-util-watchdog-fixed-watchdog-implementation.patch of Package sssd.22444

From d8160825682ef055b362fd7741d252e7aee39638 Mon Sep 17 00:00:00 2001
From: Alexey Tikhonov <atikhono@redhat.com>
Date: Wed, 11 Dec 2019 18:42:49 +0100
Subject: [PATCH 1/5] util/watchdog: fixed watchdog implementation
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

In case watchdog detected locked process and this process was parent
process it just sent SIGTERM to the whole group of processes, including
itself.
This handling was wrong: generic `server_setup()` installs custom
libtevent handler for SIGTERM signal so this signal is only processed
in the context of tevent mainloop. But if tevent mainloop is stuck
(exactly the case that triggers WD) then event is not processed
and this made watchdog useless.
`watchdog_handler()` and `watchdog_detect_timeshift()` were amended to do
unconditional `_exit()` after optionally sending a signal to the group.

Resolves: https://pagure.io/SSSD/sssd/issue/4089

Reviewed-by: Sumit Bose <sbose@redhat.com>
(cherry picked from commit 2c13d8bd00f1e8ff30e9fc81f183f6450303ac30)

Reviewed-by: Pavel Březina <pbrezina@redhat.com>
---
 src/util/util_watchdog.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/util/util_watchdog.c b/src/util/util_watchdog.c
index 20a8b8967..599b7fc40 100644
--- a/src/util/util_watchdog.c
+++ b/src/util/util_watchdog.c
@@ -54,9 +54,8 @@ static void watchdog_detect_timeshift(void)
         if (write(watchdog_ctx.pipefd[1], "1", 1) != 1) {
             if (getpid() == getpgrp()) {
                 kill(-getpgrp(), SIGTERM);
-            } else {
-                _exit(1);
             }
+            _exit(1);
         }
     }
 }
@@ -75,9 +74,8 @@ static void watchdog_handler(int sig)
     if (__sync_add_and_fetch(&watchdog_ctx.ticks, 1) > WATCHDOG_MAX_TICKS) {
         if (getpid() == getpgrp()) {
             kill(-getpgrp(), SIGTERM);
-        } else {
-            _exit(1);
         }
+        _exit(1);
     }
 }
 
-- 
2.32.0

openSUSE Build Service is sponsored by