Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.4:ARM
sssd.22444
0040-util-watchdog-fixed-watchdog-implementatio...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor