xref: /csrg-svn/usr.bin/window/wwchild.c (revision 45970)
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*45970Sbostic static char sccsid[] = "@(#)wwchild.c	3.14 (Berkeley) 01/16/91";
1333514Sbostic #endif /* not lint */
1433514Sbostic 
1513921Sedward #include "ww.h"
16*45970Sbostic #include <sys/types.h>
1713921Sedward #include <sys/wait.h>
1813921Sedward 
1945034Sedward void
2013921Sedward wwchild()
2113921Sedward {
2215630Sedward 	extern errno;
2315630Sedward 	int olderrno;
2414407Sedward 	register struct ww **wp;
2513921Sedward 	union wait w;
2613921Sedward 	int pid;
2731443Sedward 	char collected = 0;
2813921Sedward 
2915630Sedward 	olderrno = errno;
3014407Sedward 	while ((pid = wait3(&w, WNOHANG|WUNTRACED, (struct rusage *)0)) > 0) {
3114407Sedward 		for (wp = wwindex; wp < &wwindex[NWW]; wp++) {
3214407Sedward 			if (*wp && (*wp)->ww_state == WWS_HASPROC
3314407Sedward 			    && (*wp)->ww_pid == pid) {
3414407Sedward 				(*wp)->ww_state = WWS_DEAD;
3531443Sedward 				collected = 1;
3613921Sedward 				break;
3713921Sedward 			}
3813921Sedward 		}
3913921Sedward 	}
4015630Sedward 	errno = olderrno;
4131443Sedward 	/* jump out of wwiomux when somebody dies */
4231443Sedward 	if (collected)
4331443Sedward 		wwsetintr();
4413921Sedward }
45