[opsview-base] [454] reinstall previous SIGALRM handler

2 views
Skip to first unread message

s...@opsview.com

unread,
May 20, 2014, 7:46:41 AM5/20/14
to opsview-...@googlegroups.com
Revision
454
Author
aburzynski
Date
2014-05-20 12:46:41 +0100 (Tue, 20 May 2014)

Log Message

reinstall previous SIGALRM handler

Modified Paths

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);

Reply all
Reply to author
Forward
0 new messages