From 2d905c846029d1aefcede24d112af26f653a3f2e Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sat, 25 Apr 1998 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1998-04-25 --- port/devproc.c | 20 ++++++++++++++++++-- port/proc.c | 2 ++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/port/devproc.c b/port/devproc.c index 52d5dd24ebbf1ea93341200fecbe2ada2b5f4f01..0e4a0960907c6ba2fdc2845b6507a80003d88ea9 100644 --- a/port/devproc.c +++ b/port/devproc.c @@ -246,11 +246,23 @@ procwstat(Chan *c, char *db) } static int -procfds(Fgrp *f, char *va, int count, long offset) +procfds(Proc *p, char *va, int count, long offset) { + Fgrp *f; Chan *c; int n, i; + f = p->fgrp; + if(f == nil) + return 0; + if(waserror()){ + unlock(f); + qunlock(&p->debug); + nexterror(); + } + + qlock(&p->debug); + lock(f); n = 0; for(i = 0; i <= f->maxfd; i++) { c = f->fd[i]; @@ -273,6 +285,10 @@ procfds(Fgrp *f, char *va, int count, long offset) n = 0; } } + unlock(f); + qunlock(&p->debug); + poperror(); + return n; } @@ -519,7 +535,7 @@ procread(Chan *c, void *va, long n, vlong off) case Qnoteid: return readnum(offset, va, n, p->noteid, NUMSIZE); case Qfd: - return procfds(p->fgrp, va, n, offset); + return procfds(p, va, n, offset); } error(Egreg); return 0; /* not reached */ diff --git a/port/proc.c b/port/proc.c index 4203f6c831f9524d4111a8291f3e9ed1418dee90..3d07bc34382a01503bc8fcb961862d1c04500fac 100644 --- a/port/proc.c +++ b/port/proc.c @@ -648,9 +648,11 @@ pexit(char *exitstr, int freemem) up->alarm = 0; if(up->fgrp){ + qlock(&up->debug); fgrp = up->fgrp; up->fgrp = nil; closefgrp(fgrp); + qunlock(&up->debug); } if(up->egrp) closeegrp(up->egrp);