git: 9front

Download patch

ref: 4623aa1036dd0229cfc79db0c4ee82e772ae4a2d
parent: ef19b3443cfd286b2260f81f27efc035102db8e3
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Tue Mar 14 15:32:20 EDT 2017

upas/fs: make sure mbox is locked during msgdecref() in rclunk()

--- a/sys/src/cmd/upas/fs/fs.c
+++ b/sys/src/cmd/upas/fs/fs.c
@@ -1442,17 +1442,17 @@
 	/* coherence(); */
 	f->fid = -1;
 	f->open = 0;
-	if(f->mtop){
-		qlock(f->mb);
-		msgdecref(f->mb, f->mtop);
-		qunlock(f->mb);
-	}
+	mb = f->mb;
+	if(mb != nil)
+		qlock(mb);
+	if(f->mtop)
+		msgdecref(mb, f->mtop);
 	if(f->m)
-		msgdecref(f->mb, gettopmsg(f->mb, f->m));
+		msgdecref(mb, gettopmsg(mb, f->m));
 	f->m = f->mtop = nil;
-	mb = f->mb;
 	if(mb != nil){
 		f->mb = nil;
+		qunlock(mb);
 		assert(mb->refs > 0);
 		qlock(&mbllock);
 		mboxdecref(mb);
--