Browse Source

Plan 9 from Bell Labs 2011-03-17

David du Colombier 13 years ago
parent
commit
62f3caeeee

+ 1 - 1
sys/src/cmd/ndb/dnarea.c

@@ -119,7 +119,7 @@ refresh_areas(Area *s)
 
 		pid = fork();
 		if (pid == -1) {
-			sleep(1000);	/* don't try it again immediately */
+			sleep(1000);	/* don't fork again immediately */
 			continue;
 		}
 		if (pid == 0){

+ 2 - 2
sys/src/cmd/ndb/dns.c

@@ -437,7 +437,7 @@ io(void)
 		n = read9pmsg(mfd[0], mdata, sizeof mdata);
 		if(n<=0){
 			dnslog("error reading 9P from %s: %r", mntpt);
-			sleep(2000);		/* don't thrash */
+			sleep(2000);	/* don't thrash after read error */
 			return;
 		}
 
@@ -452,7 +452,7 @@ io(void)
 			dnslog("%F", &job->request);
 
 		getactivity(&req, 0);
-		req.aborttime = time(nil) + Maxreqtm;
+		req.aborttime = timems() + Maxreqtm;
 		req.from = "9p";
 
 		switch(job->request.type){

+ 10 - 5
sys/src/cmd/ndb/dns.h

@@ -1,5 +1,10 @@
 #include <thread.h>		/* for Ref */
 
+#define NS2MS(ns) ((ns) / 1000000L)
+#define S2MS(s)   ((s)  * 1000LL)
+
+#define timems()	NS2MS(nsec())
+
 typedef struct Ndbtuple Ndbtuple;
 
 enum
@@ -132,8 +137,8 @@ enum
 	Reserved=	5*Min,
 
 	/* packet sizes */
-	Maxudp=		512,	/* maximum bytes per udp message */
-	Maxudpin=	2048,	/* maximum bytes per udp message */
+	Maxudp=		512,	/* maximum bytes per udp message sent */
+	Maxudpin=	2048,	/* maximum bytes per udp message rcv'd */
 
 	/* length of domain name hash table */
 	HTLEN= 		4*1024,
@@ -147,8 +152,8 @@ enum
 	/* parallelism: tune; was 32; allow lots */
 	Maxactive=	250,
 
-	/* tune; was 60; keep it short */
-	Maxreqtm=	30,	/* max. seconds to process a request */
+	/* tune; was 60*1000; keep it short */
+	Maxreqtm=	8*1000,	/* max. ms to process a request */
 
 	Notauthoritative = 0,
 	Authoritative,
@@ -175,7 +180,7 @@ typedef struct Txt	Txt;
 struct Request
 {
 	int	isslave;	/* pid of slave */
-	ulong	aborttime;	/* time at which we give up */
+	uvlong	aborttime;	/* time in ms at which we give up */
 	jmp_buf	mret;		/* where master jumps to after starting a slave */
 	int	id;
 	char	*from;		/* who asked us? */

+ 3 - 2
sys/src/cmd/ndb/dnsdebug.c

@@ -71,6 +71,7 @@ main(int argc, char *argv[])
 	}ARGEND
 
 	now = time(nil);
+	nowns = nsec();
 	dninit();
 	fmtinstall('R', prettyrrfmt);
 	if(myipaddr(ipaddr, mntpt) < 0)
@@ -319,7 +320,7 @@ squirrelserveraddrs(void)
 			continue;
 		}
 		req.isslave = 1;
-		req.aborttime = now + Maxreqtm;
+		req.aborttime = NS2MS(nowns) + Maxreqtm;
 		*l = dnresolve(rp->host->name, Cin, Ta, &req, 0, 0, Recurse, 0, 0);
 		while(*l != nil)
 			l = &(*l)->next;
@@ -420,7 +421,7 @@ doquery(char *name, char *tstr)
 	memset(&req, 0, sizeof req);
 	getactivity(&req, 0);
 	req.isslave = 1;
-	req.aborttime = now + Maxreqtm;
+	req.aborttime = NS2MS(nowns) + Maxreqtm;
 	rr = dnresolve(buf, Cin, type, &req, 0, 0, Recurse, rooted, 0);
 	if(rr){
 		print("----------------------------\n");

+ 1 - 1
sys/src/cmd/ndb/dnstcp.c

@@ -100,7 +100,7 @@ main(int argc, char *argv[])
 			break;
 
 		getactivity(&req, 0);
-		req.aborttime = now + 15*Min;
+		req.aborttime = timems() + S2MS(15*Min);
 		rcode = 0;
 		memset(&reqmsg, 0, sizeof reqmsg);
 		err = convM2DNS(buf, len, &reqmsg, &rcode);

+ 1 - 1
sys/src/cmd/ndb/dnudpserver.c

@@ -188,7 +188,7 @@ restart:
 		// dnslog("read received UDP from %I to %I",
 		//	((Udphdr*)buf)->raddr, ((Udphdr*)buf)->laddr);
 		getactivity(&req, 0);
-		req.aborttime = now + Maxreqtm;
+		req.aborttime = timems() + Maxreqtm;
 //		req.from = smprint("%I", ((Udphdr*)buf)->raddr);
 		req.from = smprint("%I", buf);
 		rcode = 0;

+ 2 - 0
sys/src/libhttpd/hio.c

@@ -400,6 +400,8 @@ _hflush(Hio *h, int force, int dolength)
 	uchar *s;
 	int w;
 
+	if(h == nil)
+		return -1;
 	if(h->state != Hwrite){
 		h->state = Herr;
 		h->stop = h->pos;