M port/devproc.c => port/devproc.c +2 -0
@@ 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) {
M port/sysfile.c => port/sysfile.c +10 -14
@@ 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;
}