Experiment: ignore double-responds.

Also allow nil string as empty string in readstr.
This commit is contained in:
rsc 2006-02-05 15:34:18 +00:00
parent eb9be70308
commit 39e5957ace
2 changed files with 14 additions and 3 deletions

View file

@ -755,6 +755,11 @@ respond(Req *r, char *error)
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 @@ if(chatty9p)
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);

View file

@ -21,5 +21,8 @@ readbuf(Req *r, void *s, long n)
void
readstr(Req *r, char *s)
{
readbuf(r, s, strlen(s));
if(s == nil)
r->ofcall.count = 0;
else
readbuf(r, s, strlen(s));
}