xref: /csrg-svn/usr.bin/window/wwchild.c (revision 62477)
118727Sedward /*
2*62477Sbostic  * Copyright (c) 1983, 1993
3*62477Sbostic  *	The Regents of the University of California.  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*62477Sbostic static char sccsid[] = "@(#)wwchild.c	8.1 (Berkeley) 06/06/93";
1333514Sbostic #endif /* not lint */
1433514Sbostic 
1513921Sedward #include "ww.h"
1645970Sbostic #include <sys/types.h>
1713921Sedward #include <sys/wait.h>
1813921Sedward 
1945034Sedward void
wwchild()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;
3046901Sbostic 	while ((pid =
3146901Sbostic 	    wait3((int *)&w, WNOHANG|WUNTRACED, (struct rusage *)0)) > 0) {
3214407Sedward 		for (wp = wwindex; wp < &wwindex[NWW]; wp++) {
3314407Sedward 			if (*wp && (*wp)->ww_state == WWS_HASPROC
3414407Sedward 			    && (*wp)->ww_pid == pid) {
3514407Sedward 				(*wp)->ww_state = WWS_DEAD;
3631443Sedward 				collected = 1;
3713921Sedward 				break;
3813921Sedward 			}
3913921Sedward 		}
4013921Sedward 	}
4115630Sedward 	errno = olderrno;
4231443Sedward 	/* jump out of wwiomux when somebody dies */
4331443Sedward 	if (collected)
4431443Sedward 		wwsetintr();
4513921Sedward }
46