[1205] in Kerberos-V5-bugs

home help back first fref pref prev next nref lref last post

krb5b4pl3: slave/kpropd.c: don't ignore SIGCHLD

daemon@ATHENA.MIT.EDU (Jonathan I. Kamens)
Sun Mar 19 20:55:51 1995

From: "Jonathan I. Kamens" <jik@cam.ov.com>
Date: Sun, 19 Mar 1995 20:59:06 -0500
To: krb5-bugs@MIT.EDU

kpropd shouldn't signal(SIGCHLD, SIG_IGN) in the parent.  Instead, it
should wait() until the child exits.  This was causing problems
because setting SIGCHLD to SIG_IGN under SYSV causes child processes
to get reaped automatically, so the wait() for kdb5_edit was failing.

--- slave/kpropd.c	1995/03/13 21:16:54	1.2
+++ slave/kpropd.c	1995/03/13 21:21:49	1.3
@@ -173,6 +173,8 @@
 		exit(1);
 	}
 	while (1) {
+		int child_pid;
+	    
 		memset((char *)&frominet, 0, sizeof(frominet));
 		fromlen = sizeof(frominet);
 		s = accept(finet, (struct sockaddr *) &frominet, &fromlen);
@@ -183,15 +185,24 @@
 					"from accept system call");
 			continue;
 		}
-		if (debug || fork() == 0) {
-			(void) signal(SIGCHLD, SIG_IGN);
+		if (debug)
+			child_pid = 0;
+		else
+			child_pid = fork();
+		switch (child_pid) {
+		case -1:
+			com_err(progname, errno, "while forking");
+			exit(1);
+		case 0:
 			(void) close(finet);
 
 			doit(s);
 			close(s);
 			exit(0);
+		default:
+			wait(0);
+			close(s);
 		}
-		close(s);
 	}
 }
 

home help back first fref pref prev next nref lref last post