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