xref: /csrg-svn/usr.bin/window/wwchild.c (revision 45034)
118727Sedward /*
233514Sbostic  * Copyright (c) 1983 Regents of the University of California.
333514Sbostic  * All rights reserved.
433514Sbostic  *
542954Sbostic  * This code is derived from software contributed to Berkeley by
642954Sbostic  * Edward Wang at The University of California, Berkeley.
742954Sbostic  *
842835Sbostic  * %sccs.include.redist.c%
918727Sedward  */
1018727Sedward 
1133514Sbostic #ifndef lint
12*45034Sedward static char sccsid[] = "@(#)wwchild.c	3.13 (Berkeley) 08/12/90";
1333514Sbostic #endif /* not lint */
1433514Sbostic 
1513921Sedward #include "ww.h"
1613921Sedward #include <sys/wait.h>
1713921Sedward 
18*45034Sedward void
1913921Sedward wwchild()
2013921Sedward {
2115630Sedward 	extern errno;
2215630Sedward 	int olderrno;
2314407Sedward 	register struct ww **wp;
2413921Sedward 	union wait w;
2513921Sedward 	int pid;
2631443Sedward 	char collected = 0;
2713921Sedward 
2815630Sedward 	olderrno = errno;
2914407Sedward 	while ((pid = wait3(&w, WNOHANG|WUNTRACED, (struct rusage *)0)) > 0) {
3014407Sedward 		for (wp = wwindex; wp < &wwindex[NWW]; wp++) {
3114407Sedward 			if (*wp && (*wp)->ww_state == WWS_HASPROC
3214407Sedward 			    && (*wp)->ww_pid == pid) {
3314407Sedward 				(*wp)->ww_state = WWS_DEAD;
3431443Sedward 				collected = 1;
3513921Sedward 				break;
3613921Sedward 			}
3713921Sedward 		}
3813921Sedward 	}
3915630Sedward 	errno = olderrno;
4031443Sedward 	/* jump out of wwiomux when somebody dies */
4131443Sedward 	if (collected)
4231443Sedward 		wwsetintr();
4313921Sedward }
44