From 962b20ca094661abda76a35650b948e156627104 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 11 Mar 1993 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1993-03-11 --- port/devproc.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/port/devproc.c b/port/devproc.c index ed22d0fab2ac4b48655a984ff71cdcc8d80422c3..e723dce8a594da767b7a0833b01204da4c7a53c5 100644 --- a/port/devproc.c +++ b/port/devproc.c @@ -66,7 +66,7 @@ procgen(Chan *c, Dirtab *tab, int ntab, int s, Dir *dp) Qid qid; Proc *p; char buf[NAMELEN]; - ulong pid, path, perm; + ulong pid, path, perm, len; USED(ntab); if(c->qid.path == CHDIR){ @@ -94,8 +94,12 @@ procgen(Chan *c, Dirtab *tab, int ntab, int s, Dir *dp) if(perm == 0) perm = p->procmode; + len = tab->length; + if(QID(c->qid) == Qwait) + len = p->nwait * sizeof(Waitmsg); + qid = (Qid){path|tab->qid.path, c->qid.vers}; - devdir(c, qid, tab->name, tab->length, p->user, perm, dp); + devdir(c, qid, tab->name, len, p->user, perm, dp); return 1; } @@ -399,6 +403,10 @@ procread(Chan *c, void *va, long n, ulong offset) } lock(&p->exl); + if(u->p == p && p->nchild == 0 && p->waitq == 0) { + unlock(&p->exl); + error(Enochild); + } while(p->waitq == 0) { unlock(&p->exl); sleep(&p->waitr, haswaitq, p);