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().
*/