Experiment: ignore double-responds.
Also allow nil string as empty string in readstr.
diff --git a/src/lib9p/srv.c b/src/lib9p/srv.c
index c8ca46e..ec02c81 100644
--- a/src/lib9p/srv.c
+++ b/src/lib9p/srv.c
@@ -755,6 +755,11 @@
 	srv = r->srv;
 	assert(srv != nil);
 
+	if(r->responded){
+		assert(r->pool);
+		goto free;
+	}
+		
 	assert(r->responded == 0);
 	r->error = error;
 
@@ -806,13 +811,16 @@
 		sysfatal("lib9p srv: write %d returned %d on fd %d: %r", n, m, srv->outfd);
 	qunlock(&srv->wlock);
 
+free:
 	qlock(&r->lk);	/* no one will add flushes now */
 	r->responded = 1;
-	qunlock(&r->lk);
-
+	
 	for(i=0; i<r->nflush; i++)
 		respond(r->flush[i], nil);
 	free(r->flush);
+	r->nflush = 0;
+	r->flush = nil;
+	qunlock(&r->lk);
 
 	if(r->pool)
 		closereq(r);
diff --git a/src/lib9p/util.c b/src/lib9p/util.c
index 17588a9..5b76f73 100644
--- a/src/lib9p/util.c
+++ b/src/lib9p/util.c
@@ -21,5 +21,8 @@
 void
 readstr(Req *r, char *s)
 {
-	readbuf(r, s, strlen(s));
+	if(s == nil)
+		r->ofcall.count = 0;
+	else
+		readbuf(r, s, strlen(s));
 }