Modified: trunk/patches/nagios_defunct_reload_workers.patch
===================================================================
--- trunk/patches/nagios_defunct_reload_workers.patch 2014-05-20 11:35:12 UTC (rev 453)
+++ trunk/patches/nagios_defunct_reload_workers.patch 2014-05-20 11:46:41 UTC (rev 454)
@@ -1,7 +1,13 @@
diff -ur nagios-4.0.20130912.orig//base/workers.c nagios-4.0.20130912//base/workers.c
--- nagios-4.0.20130912.orig//base/workers.c 2014-05-20 11:01:42.000000000 +0000
-+++ nagios-4.0.20130912//base/workers.c 2014-05-20 11:30:03.000000000 +0000
-@@ -323,6 +323,7 @@
++++ nagios-4.0.20130912//base/workers.c 2014-05-20 11:45:34.000000000 +0000
+@@ -320,9 +320,13 @@
+ return 0;
+ }
+
++void my_noop_sighandler(int sig) {
++}
++
static int wproc_destroy(struct wproc_worker *wp, int flags)
{
int i = 0, force = 0, self;
@@ -9,11 +15,12 @@
if (!wp)
return 0;
-@@ -353,6 +354,19 @@
+@@ -353,6 +357,23 @@
iobroker_close(nagios_iobs, wp->sd);
+ if (wp->pid) {
++ sighandler_t prevhndlr = signal(SIGALRM, my_noop_sighandler);
+ alarm(1);
+ if ( waitpid(wp->pid, &i, 0) == wp->pid ) {
+ alarm(0);
@@ -21,6 +28,9 @@
+ alarm(0);
+ kill(wp->pid, SIGKILL); // try again
+ }
++ if ( prevhndlr ) {
++ signal(SIGALRM, prevhndlr);
++ }
+ } else {
+ nsleep.tv_nsec = 500000000L; /* 0.5s */
+ nanosleep(&nsleep, NULL);