clear out waiters list after fork Reference: /n/atom/patch/applied2013/apeforkwait Date: Fri Sep 20 16:29:55 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/ape/lib/ap/plan9/lib.h Fri Sep 20 16:29:55 2013 +++ /sys/src/ape/lib/ap/plan9/lib.h Fri Sep 20 16:29:55 2013 @@ -59,6 +59,7 @@ extern void _closebuf(int); extern int _readbuf(int, void*, int, int); extern void _detachbuf(void); +extern void _nowaiters(void); extern void _finish(int, char *); extern char *_ultoa(char *, unsigned long); extern int _notehandler(void *, char *); --- /sys/src/ape/lib/ap/plan9/wait.c Fri Sep 20 16:29:55 2013 +++ /sys/src/ape/lib/ap/plan9/wait.c Fri Sep 20 16:29:55 2013 @@ -83,6 +83,12 @@ return (r<<8) | t; } +void +_nowaiters(void) +{ + wd = nil; +} + static void waitresource(struct rusage *ru, Waitmsg *w) { @@ -123,7 +129,7 @@ if(options & WNOHANG){ snprintf(pname, sizeof(pname), "/proc/%d/wait", getpid()); d = _dirstat(pname); - if(d != nil && d->length == 0){ + if(d == nil || d->length == 0){ free(d); return 0; } --- /sys/src/ape/lib/ap/plan9/fork.c Fri Sep 20 16:29:55 2013 +++ /sys/src/ape/lib/ap/plan9/fork.c Fri Sep 20 16:29:55 2013 @@ -14,6 +14,7 @@ if(n == 0) { _detachbuf(); _sessleader = 0; + _nowaiters(); } return n; }