plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

commit 2ca8ede24ada82f22a77ab172a0a8214f623dc94
parent 23420c24937a8899bf1cfb900b9a5155b6f924ae
Author: Fazlul Shahriar <fshahriar@gmail.com>
Date:   Fri,  9 Oct 2020 16:36:34 -0400

fossil: fix EOF detection when reading 9P message

When the 9P connection is closed, reads on the connection will keep
returning 0. So, fossil ends up looping forever, trying to read a 9P
message, consuming 100% CPU. The fix interprets 0 bytes read as EOF.

Reproduce by killing the 9pserve process serving the fossil service, or
by listening on tcp and using 9p(1).

Diffstat:
Msrc/cmd/fossil/9proc.c | 5++---
1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/cmd/fossil/9proc.c b/src/cmd/fossil/9proc.c @@ -362,9 +362,8 @@ msgRead(void* v) while(!eof){ m = msgAlloc(con); - while((n = read9pmsg(fd, m->data, con->msize)) == 0) - ; - if(n < 0){ + n = read9pmsg(fd, m->data, con->msize); + if(n <= 0){ m->t.type = Tversion; m->t.fid = NOFID; m->t.tag = NOTAG;