[opsview-base] [452] wait for known pid up to 1s or wait for 0.5s

0 views
Skip to first unread message

s...@opsview.com

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

Log Message

wait for known pid up to 1s or wait for 0.5s

Modified Paths

Modified: trunk/patches/nagios_defunct_reload_workers.patch
===================================================================
--- trunk/patches/nagios_defunct_reload_workers.patch	2014-05-20 11:03:37 UTC (rev 451)
+++ trunk/patches/nagios_defunct_reload_workers.patch	2014-05-20 11:31:15 UTC (rev 452)
@@ -1,11 +1,30 @@
-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-19 15:17:50.000000000 +0000
-+++ nagios-4.0.20130912/base/workers.c	2014-05-19 16:27:00.000000000 +0000
-@@ -353,6 +353,8 @@
+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 @@
+ static int wproc_destroy(struct wproc_worker *wp, int flags)
+ {
+ 	int i = 0, force = 0, self;
++	struct timespec nsleep = {0};
  
+ 	if (!wp)
+ 		return 0;
+@@ -353,6 +354,19 @@
+ 
  	iobroker_close(nagios_iobs, wp->sd);
  
-+ 	sleep(1);
++	if (wp->pid) {
++		alarm(1);
++		if ( waitpid(wp->pid, &i, 0) == wp->pid ) {
++			alarm(0);
++		} else {
++			alarm(0);
++			kill(wp->pid, SIGKILL); // try again
++		}
++	} else {
++		nsleep.tv_nsec = 500000000L; /* 0.5s */
++		nanosleep(&nsleep, NULL);
++	}
 +
  	/* reap our possibly lost children */
  	while (waitpid(-1, &i, WNOHANG) > 0)

Reply all
Reply to author
Forward
0 new messages