From 2ca8ede24ada82f22a77ab172a0a8214f623dc94 Mon Sep 17 00:00:00 2001 From: Fazlul Shahriar Date: Fri, 9 Oct 2020 16:36:34 -0400 Subject: [PATCH] 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). --- src/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 index 23da4f4e..d31a7426 100644 --- 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;