From a995789e4783349efc714d4d961c9b9d8d7c04fb Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 18 Mar 1993 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1993-03-18 --- port/devproc.c | 2 ++ port/sysfile.c | 24 ++++++++++-------------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/port/devproc.c b/port/devproc.c index e723dce8a594da767b7a0833b01204da4c7a53c5..167116bad89033f5d9c35650b84a4fc0dc4ba86a 100644 --- a/port/devproc.c +++ b/port/devproc.c @@ -626,6 +626,8 @@ procctlreq(Proc *p, char *va, int n) } else if(strncmp(buf, "hang", 4) == 0) p->hang = 1; + else if(strncmp(buf, "nohang", 6) == 0) + p->hang = 0; else if(strncmp(buf, "waitstop", 8) == 0) procstopwait(p, 0); else if(strncmp(buf, "startstop", 9) == 0) { diff --git a/port/sysfile.c b/port/sysfile.c index 67a7337e921c908ea04edcb4307d7522af2d5ae2..2d9232ffea533bb385c36e77f5a9994d4072011f 100644 --- a/port/sysfile.c +++ b/port/sysfile.c @@ -232,26 +232,24 @@ unionread(Chan *c, void *va, long n) Pgrp *pg; pg = u->p->pgrp; - qlock(&pg->nsh); + rlock(&pg->ns); for(;;) { if(waserror()) { - qunlock(&pg->nsh); + runlock(&pg->ns); nexterror(); } - nc = clone(c->mnt->cmnt, 0); + nc = clone(c->mnt->to, 0); poperror(); if(c->mountid != c->mnt->mountid) { - pprint("unionread: changed underfoot\n"); - qunlock(&pg->nsh); + pprint("unionread: changed underfoot?\n"); + runlock(&pg->ns); close(nc); return 0; } - /* - * Error causes component of union to be skipped - */ + /* Error causes component of union to be skipped */ if(waserror()) { close(nc); goto next; @@ -260,26 +258,24 @@ unionread(Chan *c, void *va, long n) nc = (*devtab[nc->type].open)(nc, OREAD); nc->offset = c->offset; nr = (*devtab[nc->type].read)(nc, va, n, nc->offset); - /* - * devdirread e.g. changes it - */ + /* devdirread e.g. changes it */ c->offset = nc->offset; poperror(); close(nc); if(nr > 0) { - qunlock(&pg->nsh); + runlock(&pg->ns); return nr; } /* Advance to next element */ next: - c->mnt = c->mnt->mount; + c->mnt = c->mnt->next; if(c->mnt == 0) break; c->mountid = c->mnt->mountid; c->offset = 0; } - qunlock(&pg->nsh); + runlock(&pg->ns); return 0; }