xref: /csrg-svn/usr.bin/window/wwchild.c (revision 42954)
118727Sedward /*
233514Sbostic  * Copyright (c) 1983 Regents of the University of California.
333514Sbostic  * All rights reserved.
433514Sbostic  *
5*42954Sbostic  * This code is derived from software contributed to Berkeley by
6*42954Sbostic  * Edward Wang at The University of California, Berkeley.
7*42954Sbostic  *
842835Sbostic  * %sccs.include.redist.c%
918727Sedward  */
1018727Sedward 
1133514Sbostic #ifndef lint
12*42954Sbostic static char sccsid[] = "@(#)wwchild.c	3.12 (Berkeley) 06/06/90";
1333514Sbostic #endif /* not lint */
1433514Sbostic 
1513921Sedward #include "ww.h"
1613921Sedward #include <sys/wait.h>
1713921Sedward 
1813921Sedward wwchild()
1913921Sedward {
2015630Sedward 	extern errno;
2115630Sedward 	int olderrno;
2214407Sedward 	register struct ww **wp;
2313921Sedward 	union wait w;
2413921Sedward 	int pid;
2531443Sedward 	char collected = 0;
2613921Sedward 
2715630Sedward 	olderrno = errno;
2814407Sedward 	while ((pid = wait3(&w, WNOHANG|WUNTRACED, (struct rusage *)0)) > 0) {
2914407Sedward 		for (wp = wwindex; wp < &wwindex[NWW]; wp++) {
3014407Sedward 			if (*wp && (*wp)->ww_state == WWS_HASPROC
3114407Sedward 			    && (*wp)->ww_pid == pid) {
3214407Sedward 				(*wp)->ww_state = WWS_DEAD;
3331443Sedward 				collected = 1;
3413921Sedward 				break;
3513921Sedward 			}
3613921Sedward 		}
3713921Sedward 	}
3815630Sedward 	errno = olderrno;
3931443Sedward 	/* jump out of wwiomux when somebody dies */
4031443Sedward 	if (collected)
4131443Sedward 		wwsetintr();
4213921Sedward }
43