~kris/9p

9hist

feaa8d4d2ede2f97295676a646e32ecb3036750a — David du Colombier 25 years ago a06df69
Plan 9 from Bell Labs 2001-03-17
3 files changed, 27 insertions(+), 13 deletions(-)

M ip/tcp.c
M port/devproc.c
M port/qio.c
M ip/tcp.c => ip/tcp.c +1 -0
@@ 377,6 377,7 @@ tcpclose(Conv *c)
	qhangup(c->rq, nil);
	qhangup(c->wq, nil);
	qhangup(c->eq, nil);
	qflush(c->rq);

	switch(tcb->state) {
	case Listen:

M port/devproc.c => port/devproc.c +15 -13
@@ 851,10 851,18 @@ procstopwait(Proc *p, int ctl)
}

void
procctlfgrp(Fgrp *f)
procctlclosefiles(Proc *p)
{
	int i;
	Chan *c;
	Fgrp *f;

	qlock(&p->debug);
	f = p->fgrp;
	if(f == nil){
		qunlock(&p->debug);
		error(Eprocdied);
	}

	lock(f);
	f->ref++;


@@ 863,12 871,16 @@ procctlfgrp(Fgrp *f)
		if(c != 0) {
			f->fd[i] = 0;
			unlock(f);
			qunlock(&p->debug);
			cclose(c);
			qlock(&p->debug);
			lock(f);
		}
	}
	unlock(f);
	closefgrp(f);

	qunlock(&p->debug);
}

void


@@ 924,18 936,8 @@ procctlreq(Proc *p, char *va, int n)
		ready(p);
	}
	else
	if(strncmp(buf, "closefiles", 10) == 0){
		qlock(&p->debug);
		if(waserror()){
			qunlock(&p->debug);
			nexterror();
		}
		if(p->fgrp == nil)
			error(Eprocdied);
		procctlfgrp(p->fgrp);
		qunlock(&p->debug);
		poperror();
	}
	if(strncmp(buf, "closefiles", 10) == 0)
		procctlclosefiles(p);
	else
	if(strncmp(buf, "pri", 3) == 0) {
		if(n < 4)

M port/qio.c => port/qio.c +11 -0
@@ 532,6 532,11 @@ qpass(Queue *q, Block *b)
		iunlock(q);
		return -1;
	}
	if(q->state & Qclosed){
		freeblist(b);
		iunlock(q);
		return BALLOC(b);
	}

	/* add buffer to queue */
	if(q->bfirst)


@@ 575,6 580,12 @@ qpassnolim(Queue *q, Block *b)
	dowakeup = 0;
	ilock(q);

	if(q->state & Qclosed){
		freeblist(b);
		iunlock(q);
		return BALLOC(b);
	}

	/* add buffer to queue */
	if(q->bfirst)
		q->blast->next = b;