commit 2ca8ede24ada82f22a77ab172a0a8214f623dc94 from: Fazlul Shahriar via: Dan Cross date: Tue Jul 26 16:11:38 2022 UTC 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). commit - 23420c24937a8899bf1cfb900b9a5155b6f924ae commit + 2ca8ede24ada82f22a77ab172a0a8214f623dc94 blob - 23da4f4ef665f1c2af5b2fafe16a5af6f8564efd blob + d31a74265b7a2d97fec71de6fdfbc8590469b7ad --- src/cmd/fossil/9proc.c +++ 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;