plan9port

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

commit 4a6f0510731b99025c51ce4dc35eee08f697f91a
parent ebda53e16b473c6ad8df070edd6f58e2e1e10994
Author: Russ Cox <rsc@swtch.com>
Date:   Wed, 22 Aug 2007 09:14:25 -0400

9pserve: fix a new race involving assert(c->nmsg == 0).

Just like outputthread can have processed the message
but not yet called msgput, the same is true of the
connoutthread, so we cannot check c->nmsg until
after the connoutthread has shut down gracefully.

Diffstat:
Msrc/cmd/9pserve.c | 6+++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/cmd/9pserve.c b/src/cmd/9pserve.c @@ -560,13 +560,13 @@ connthread(void *arg) sendq(outq, &sync); recvp(c->outqdead); - /* should be no messages left anywhere. */ - assert(c->nmsg == 0); - /* everything is quiet; can close the local output queue. */ sendq(c->outq, nil); recvp(c->outqdead); + /* should be no messages left anywhere. */ + assert(c->nmsg == 0); + /* clunk all outstanding fids */ for(i=0; i<NHASH; i++){ for(h=c->fid[i]; h; h=hnext){