t9pserve: fix a new race involving assert(c->nmsg == 0). - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
commit 4a6f0510731b99025c51ce4dc35eee08f697f91a
parent ebda53e16b473c6ad8df070edd6f58e2e1e10994
Author: Russ Cox 
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:
  M src/cmd/9pserve.c                   |       6 +++---

1 file changed, 3 insertions(+), 3 deletions(-)
---
diff --git a/src/cmd/9pserve.c b/src/cmd/9pserve.c
t@@ -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; ifid[i]; h; h=hnext){