~kris/9p

9hist

a995789e4783349efc714d4d961c9b9d8d7c04fb — David du Colombier 33 years ago daea032
Plan 9 from Bell Labs 1993-03-18
2 files changed, 12 insertions(+), 14 deletions(-)

M port/devproc.c
M port/sysfile.c
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;
}