add pathnames.h
[unix-history] / usr / src / usr.bin / window / wwchild.c
index c62cb18..bb4afe6 100644 (file)
@@ -1,8 +1,26 @@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)wwchild.c   3.3 83/12/01";
-#endif
+static char sccsid[] = "@(#)wwchild.c  3.9 (Berkeley) %G%";
+#endif /* not lint */
 
 #include "ww.h"
 
 #include "ww.h"
+#include <sys/types.h>
 #include <sys/wait.h>
 
 wwchild()
 #include <sys/wait.h>
 
 wwchild()
@@ -12,6 +30,7 @@ wwchild()
        register struct ww **wp;
        union wait w;
        int pid;
        register struct ww **wp;
        union wait w;
        int pid;
+       char collected = 0;
 
        olderrno = errno;
        while ((pid = wait3(&w, WNOHANG|WUNTRACED, (struct rusage *)0)) > 0) {
 
        olderrno = errno;
        while ((pid = wait3(&w, WNOHANG|WUNTRACED, (struct rusage *)0)) > 0) {
@@ -19,9 +38,13 @@ wwchild()
                        if (*wp && (*wp)->ww_state == WWS_HASPROC
                            && (*wp)->ww_pid == pid) {
                                (*wp)->ww_state = WWS_DEAD;
                        if (*wp && (*wp)->ww_state == WWS_HASPROC
                            && (*wp)->ww_pid == pid) {
                                (*wp)->ww_state = WWS_DEAD;
+                               collected = 1;
                                break;
                        }
                }
        }
        errno = olderrno;
                                break;
                        }
                }
        }
        errno = olderrno;
+       /* jump out of wwiomux when somebody dies */
+       if (collected)
+               wwsetintr();
 }
 }