diff --git a/rc/bin/termrc b/rc/bin/termrc index d4555af60c..3a55665156 100755 --- a/rc/bin/termrc +++ b/rc/bin/termrc @@ -5,6 +5,9 @@ NDBFILE=/lib/ndb/local mntgen -s slashn && chmod 666 /srv/slashn +# parallelism for mk +NPROC = `{wc -l /dev/sysstat} + # bind all likely devices (#S was bound in boot) for(i in f t m v L P u U '$' Σ κ) /bin/bind -a '#'^$i /dev >/dev/null >[2=1] diff --git a/sys/src/9k/ip/iproute.c b/sys/src/9k/ip/iproute.c index 6055374a80..12ec16ee76 100644 --- a/sys/src/9k/ip/iproute.c +++ b/sys/src/9k/ip/iproute.c @@ -817,6 +817,9 @@ routewrite(Fs *f, Chan *c, char *p, int n) nexterror(); } + if(cb->nf < 1) + error("short control request"); + if(strcmp(cb->f[0], "flush") == 0){ tag = cb->f[1]; for(h = 0; h < nelem(f->v4root); h++) @@ -880,7 +883,8 @@ routewrite(Fs *f, Chan *c, char *p, int n) print("no route\n"); else printroute(q); - } + } else + error(Ebadctl); poperror(); free(cb); diff --git a/sys/src/9k/port/devtls.c b/sys/src/9k/port/devtls.c index de35f0cdea..839cd1d2f9 100644 --- a/sys/src/9k/port/devtls.c +++ b/sys/src/9k/port/devtls.c @@ -180,7 +180,7 @@ static TlsErrs tlserrs[] = { enum { /* max. open tls connections */ - MaxTlsDevs = 1024 + MaxTlsDevs = 16*1024 }; static Lock tdlock; @@ -769,8 +769,8 @@ if(tr->debug)pprint("consumed %d header\n", RecHdrLen); if(ver != tr->version && (tr->verset || ver < MinProtoVersion || ver > MaxProtoVersion)) rcvError(tr, EProtocolVersion, "devtls expected ver=%x%s, saw (len=%d) type=%x ver=%x '%.12s'", tr->version, tr->verset?"/set":"", len, type, ver, (char*)header); - if(len > MaxCipherRecLen || len < 0) - rcvError(tr, ERecordOverflow, "record message too long %d", len); + if(len > MaxCipherRecLen || len <= 0) + rcvError(tr, ERecordOverflow, "bad record message length %d", len); ensure(tr, &tr->unprocessed, len); nconsumed = 0; poperror(); @@ -1255,7 +1255,8 @@ tlsrecwrite(TlsRec *tr, int type, Block *b) if(tr->debug)pprint("send %ld\n", BLEN(b)); if(tr->debug)pdump(BLEN(b), b->rp, "sent:"); - + if(type == RApplication) + checkstate(tr, 0, SOpen); ok = SHandshake|SOpen|SRClose; if(type == RAlert) ok |= SAlert; @@ -1372,7 +1373,6 @@ tlsbwrite(Chan *c, Block *b, vlong offset) tr->handout += n; break; case Qdata: - checkstate(tr, 0, SOpen); tlsrecwrite(tr, RApplication, b); tr->dataout += n; break; diff --git a/sys/src/9k/port/proc.c b/sys/src/9k/port/proc.c index 79fe6d30ef..7f2ecb912f 100644 --- a/sys/src/9k/port/proc.c +++ b/sys/src/9k/port/proc.c @@ -463,8 +463,6 @@ rebalance(void) p = rq->head; if(p == nil) continue; - if(p->mp != m) - continue; if(pri == p->basepri) continue; updatecpu(p); @@ -1052,7 +1050,7 @@ pexit(char *exitstr, int freemem) * if not a kernel process and have a parent, * do some housekeeping. */ - if(up->kp == 0) { + if(up->kp == 0 && up->parentpid != 0) { p = up->parent; if(p == nil) { if(exitstr == nil) @@ -1087,13 +1085,13 @@ pexit(char *exitstr, int freemem) p->time[TCUser] += utime; p->time[TCSys] += stime; /* - * If there would be more than 128 wait records + * If there would be more than 2000 wait records * processes for my parent, then don't leave a wait * record behind. This helps prevent badly written * daemon processes from accumulating lots of wait * records. */ - if(p->nwait < 128) { + if(p->nwait < 2000) { wq->next = p->waitq; p->waitq = wq; p->nwait++; diff --git a/sys/src/9k/port/sysproc.c b/sys/src/9k/port/sysproc.c index 5366fc8125..e38b909845 100644 --- a/sys/src/9k/port/sysproc.c +++ b/sys/src/9k/port/sysproc.c @@ -514,13 +514,6 @@ sysexec(Ar0* ar0, va_list list) up->nargs = nargs; poperror(); /* args */ - /* - * Close on exec - */ - f = up->fgrp; - for(i=0; i<=f->maxfd; i++) - fdclose(i, CCEXEC); - /* * Free old memory. * Special segments maintained across exec. @@ -602,6 +595,7 @@ sysexec(Ar0* ar0, va_list list) mmuflush(); qlock(&up->debug); up->nnote = 0; + up->notepending = 0; up->notify = 0; up->notified = 0; up->privatemem = 0; @@ -610,6 +604,13 @@ sysexec(Ar0* ar0, va_list list) if(up->hang) up->procctl = Proc_stopme; + /* + * Close on exec + */ + f = up->fgrp; + for(i=0; i<=f->maxfd; i++) + fdclose(i, CCEXEC); + ar0->v = sysexecregs(entry, TSTKTOP - PTR2UINT(argv), argc); } diff --git a/sys/src/cmd/ndb/dblookup.c b/sys/src/cmd/ndb/dblookup.c index 333c1e7247..6b5229f82d 100644 --- a/sys/src/cmd/ndb/dblookup.c +++ b/sys/src/cmd/ndb/dblookup.c @@ -737,10 +737,12 @@ db2cache(int doit) /* remove old entries */ dnageall(1); - } else + } else { + dnpurge(); /* read all the soa's to get database defaults */ for(ndb = db; ndb; ndb = ndb->next) dbfile2area(ndb); + } doit = 0; lastyoungest = youngest;