From 2fc6ec4aeae53a73da96c8ba2f0f5d2f761d315d Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Tue, 4 Nov 1997 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1997-11-04 --- ip/devip.c | 9 ++++++++- ip/igmp.c | 2 +- ip/ip.c | 2 +- ip/netlog.c | 5 ++++- ip/tcp.c | 28 ---------------------------- pc/main.c | 1 + port/devdraw.c | 14 +++++++------- port/devmnt.c | 2 ++ port/proc.c | 8 ++++++-- port/qio.c | 16 +++++++++++++++- port/sysfile.c | 7 +++++++ 11 files changed, 52 insertions(+), 42 deletions(-) diff --git a/ip/devip.c b/ip/devip.c index 4d62db65abc9c8155ca6c9bdaca8d50ad228ebf7..13cca1d5cf90b0b097dca6aa2f32c1877cfd3546 100644 --- a/ip/devip.c +++ b/ip/devip.c @@ -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); } diff --git a/ip/igmp.c b/ip/igmp.c index 365efb465b7e5b472f20c3f17811e6a14e808fb9..136ad1933a6777a6ade0e15115bf870489f4dd37 100644 --- a/ip/igmp.c +++ b/ip/igmp.c @@ -211,7 +211,7 @@ igmpiput(Media *m, Block *bp) break; rp = malloc(sizeof(*rp)); - if(rp == 0) + if(rp == nil) break; rp->m = m; diff --git a/ip/ip.c b/ip/ip.c index 6fdb068c59e1e955c038c60a16c453ee5b17cc13..01b22cc7f290693f2c06755b4b72302f59306b65 100644 --- a/ip/ip.c +++ b/ip/ip.c @@ -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"); diff --git a/ip/netlog.c b/ip/netlog.c index 453c010875d69ad008569b569533f6304b61227d..e8e4e4d85d64a5f89def9109f8906a52d3ffa73b 100644 --- a/ip/netlog.c +++ b/ip/netlog.c @@ -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; } diff --git a/ip/tcp.c b/ip/tcp.c index 5ca168b8175aa9f91e5623134caa21d634f218c0..fb457b96b964826a872723c9a6806dd88158fb4d 100644 --- a/ip/tcp.c +++ b/ip/tcp.c @@ -804,34 +804,6 @@ sndrst(Ipaddr source, Ipaddr dest, ushort length, Tcp *seg) ipoput(hbp, 0, MAXTTL); } -/* - * 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 */ diff --git a/pc/main.c b/pc/main.c index 29f3e43bed7f23fdfc2bfd94c5421693ad138d43..6e98027892b3d692222a9f5a0c7161bc77852599 100644 --- a/pc/main.c +++ b/pc/main.c @@ -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) diff --git a/port/devdraw.c b/port/devdraw.c index b8fe66d5c746cae725a177b40392762d6a53575c..4ffb159ce30d79c0cdb195d96417a8fbf2653859 100644 --- a/port/devdraw.c +++ b/port/devdraw.c @@ -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; diff --git a/port/devmnt.c b/port/devmnt.c index 9863801bc54f053cdce83849cef519714154e7c4..af1cacb2e3ea32700e21dc85e5987f36b886981d 100644 --- a/port/devmnt.c +++ b/port/devmnt.c @@ -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); } diff --git a/port/proc.c b/port/proc.c index d8725804d012d5701a36a9fce7dc07ed05e786c1..512c269b8c8ddcc3f816b6f5d13fa0060358f109 100644 --- a/port/proc.c +++ b/port/proc.c @@ -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) diff --git a/port/qio.c b/port/qio.c index 7d1ad976785792aabd0f51336b62c9fe5a9b26e2..fae8760f10545b7501d02e6d2ea4aff4b70ea06a 100644 --- a/port/qio.c +++ b/port/qio.c @@ -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; } diff --git a/port/sysfile.c b/port/sysfile.c index 13edeffdbdda09a36092f10d4b12e53040e3fdb3..e845386a363e5a0a7c7cf9234f0133e077739701 100644 --- a/port/sysfile.c +++ b/port/sysfile.c @@ -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(). */