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