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()2013921Sedwardwwchild() 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