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