~kris/9p

9hist

2fc6ec4aeae53a73da96c8ba2f0f5d2f761d315d — David du Colombier 28 years ago 461feef
Plan 9 from Bell Labs 1997-11-04
11 files changed, 52 insertions(+), 42 deletions(-)

M ip/devip.c
M ip/igmp.c
M ip/ip.c
M ip/netlog.c
M ip/tcp.c
M pc/main.c
M port/devdraw.c
M port/devmnt.c
M port/proc.c
M port/qio.c
M port/sysfile.c
M ip/devip.c => ip/devip.c +8 -1
@@ 470,8 470,14 @@ ipread(Chan *ch, void *a, long n, ulong offset)
		sprint(buf, "%s/%d %d %s \n", c->p->name, c->x, c->inuse, statename);
		return readstr(offset, p, n, buf);
	case Qdata:
{int xxx;
poot("ipread 1", 0);
		c = fs.p[PROTO(ch->qid)]->conv[CONV(ch->qid)];
		return qread(c->rq, a, n);
//		return qread(c->rq, a, n);
		xxx = qread(c->rq, a, n);
poot("ipread 2", 0);
		return xxx;
}
	case Qerr:
		c = fs.p[PROTO(ch->qid)]->conv[CONV(ch->qid)];
		return qread(c->eq, a, n);


@@ 807,6 813,7 @@ Fsprotoclone(Proto *p, char *user)
			c->x = pp - p->conv;
			c->ptcl = malloc(p->ptclsize);
			if(c->ptcl == nil) {
				unlock(c);
				free(c);
				error(Enomem);
			}

M ip/igmp.c => ip/igmp.c +1 -1
@@ 211,7 211,7 @@ igmpiput(Media *m, Block *bp)
			break;

		rp = malloc(sizeof(*rp));
		if(rp == 0)
		if(rp == nil)
			break;

		rp->m = m;

M ip/ip.c => ip/ip.c +1 -1
@@ 218,7 218,7 @@ initfrag(int size)
{
	Fragment *fq, *eq;

	fragfree = (Fragment*)malloc(sizeof(Fragment) * size);
	fragfree = malloc(sizeof(Fragment) * size);
	if(fragfree == nil)
		panic("initfrag");


M ip/netlog.c => ip/netlog.c +4 -1
@@ 62,8 62,11 @@ netlogopen(void)
		nexterror();
	}
	if(alog.opens == 0){
		if(alog.buf == nil)
		if(alog.buf == nil){
			alog.buf = malloc(Nlog);
			if(alog.buf == nil)
				error(Enomem);
		}
		alog.rptr = alog.buf;
		alog.end = alog.buf + Nlog;
	}

M ip/tcp.c => ip/tcp.c +0 -28
@@ 805,34 805,6 @@ sndrst(Ipaddr source, Ipaddr dest, ushort length, Tcp *seg)
}

/*
 *  flush an incoming call; send a reset to the remote side and close the
 *  conversation
 */
void
tcpflushincoming(Conv *s)
{
	Tcp seg;
	byte dst[4];
	Tcpctl *tcb;

	tcb = (Tcpctl*)s->ptcl;

	seg.source = s->rport;
	seg.dest = s->lport;
	seg.flags = ACK;
	seg.seq = tcb->snd.ptr;
	tcb->last_ack = tcb->rcv.nxt;
	seg.ack = tcb->rcv.nxt;

	if(s->laddr == 0) {
		hnputl(dst, s->raddr);
		s->laddr = Mediagetsrc(dst);
	}
	sndrst(s->raddr, s->laddr, 0, &seg);
	localclose(s, nil);
}

/*
 *  send a reset to the remote side and close the conversation
 */
char*

M pc/main.c => pc/main.c +1 -0
@@ 393,6 393,7 @@ confinit(void)
	if(cpuserver) {
		if(pcnt < 10)
			pcnt = 70;
		poolsetparam("Main", BY2PG*conf.npage*(100-pcnt)/100, 0, 0);
	} else {
		if(pcnt < 10) {
			if(conf.npage*BY2PG < 16*MB)

M port/devdraw.c => port/devdraw.c +7 -7
@@ 353,17 353,17 @@ drawgoodname(DImage *d)
{
	DName *n;

	/* if window, validate the screen's own images */
	if(d->dscreen)
		if(drawgoodname(d->dscreen->dimage) == 0
		|| drawgoodname(d->dscreen->dfill) == 0)
			return 0;
	if(d->name == nil)
		return 1;
	n = drawlookupname(strlen(d->name), d->name);
	if(n==nil || n->vers!=d->vers)
		return 0;
	/* if window, validate the screen's own images */
	if(d->dscreen == nil)
		return 1;
	if(drawgoodname(d->dscreen->dimage) && drawgoodname(d->dscreen->dfill))
		return 1;
	return 0;
	return 1;
}

DImage*


@@ 375,7 375,7 @@ drawlookup(Client *client, int id, int checkname)
	while(d){
		if(d->id == id){
			if(checkname && !drawgoodname(d))
				error("Eoldname");
				error(Eoldname);
			return d;
		}
		d = d->next;

M port/devmnt.c => port/devmnt.c +2 -0
@@ 696,10 696,12 @@ mountio(Mnt *m, Mntrpc *r)
	}
	m->rip = up;
	unlock(m);
poot("M1", m->c->qid.path);
	while(r->done == 0) {
		mntrpcread(m, r);
		mountmux(m, r);
	}
poot("M2", m->c->qid.path);
	mntgate(m);
}


M port/proc.c => port/proc.c +6 -2
@@ 642,11 642,15 @@ pexit(char *exitstr, int freemem)
	Segment **s, **es;
	long utime, stime;
	Waitq *wq, *f, *next;
	Fgrp *fgrp;

	up->alarm = 0;

	if(up->fgrp)
		closefgrp(up->fgrp);
	if(up->fgrp){
		fgrp = up->fgrp;
		up->fgrp = nil;
		closefgrp(fgrp);
	}
	if(up->egrp)
		closeegrp(up->egrp);
	if(up->rgrp)

M port/qio.c => port/qio.c +15 -1
@@ 21,7 21,7 @@ static ulong qcopycnt;

static int debuging;

#define QDEBUG	if(0)
#define QDEBUG	if(1)

/*
 *  IO queues


@@ 115,6 115,8 @@ allocb(int size)
	ulong addr;
	int n;

	if(size < 0)
		panic("allocb < 0");
	n = sizeof(Block) + size + (BY2V-1);
	b = mallocz(n+Hdrspc, 0);
	if(b == 0)


@@ 148,6 150,8 @@ iallocb(int size)
		return 0;
	}

	if(size < 0)
		panic("iallocb < 0");
	n = sizeof(Block) + size + (BY2V-1);
	b = mallocz(n+Hdrspc, 0);
	if(b == nil){


@@ 793,6 797,7 @@ qbread(Queue *q, int len)
	Block *b, *nb;
	int n, dowakeup;

poot("QB start", len);
	qlock(&q->rlock);
	if(waserror()){
		qunlock(&q->rlock);


@@ 821,9 826,12 @@ qbread(Queue *q, int len)

		q->state |= Qstarve;	/* flag requesting producer to wake me */
		iunlock(q);
poot("QB before sleep", len);
		sleep(&q->rr, notempty, q);
poot("QB after sleep", len);
	}

poot("QB 1", len);
	/* remove a buffered block */
	q->bfirst = b->next;
	b->next = 0;


@@ 840,6 848,7 @@ qbread(Queue *q, int len)

	/* split block if it's too big and this is not a message-oriented queue */
	nb = b;
poot("QB 2", len);
	if(n > len){
		if((q->state&Qmsg) == 0){
			iunlock(q);


@@ 870,6 879,7 @@ qbread(Queue *q, int len)

	poperror();
	qunlock(&q->rlock);
poot("QB end", nb);
	return nb;
}



@@ 882,13 892,17 @@ qread(Queue *q, void *vp, int len)
{
	Block *b;

poot("Q 1", 0);
	b = qbread(q, len);
poot("Q 2", 0);
	if(b == 0)
		return 0;

	len = BLEN(b);
	memmove(vp, b->rp, len);
poot("Q 3", 0);
	freeb(b);
poot("Q 4", 0);
	return len;
}


M port/sysfile.c => port/sysfile.c +7 -0
@@ 5,6 5,13 @@
#include	"fns.h"
#include	"../port/error.h"

void
poot(char *s, int d)
{
	if(up->slash->type<0||up->slash->type>50||(up->slash->flag&COPEN))
		panic("poot: %s %d=%lux\n", s, d, d);
}

/*
 * The sys*() routines needn't poperror() as they return directly to syscall().
 */