Fix bug in readMVar implementation: keep clean MVars clean.
authorEdward Z. Yang <ezyang@mit.edu>
Wed, 17 Jul 2013 22:49:47 +0000 (15:49 -0700)
committerEdward Z. Yang <ezyang@mit.edu>
Wed, 17 Jul 2013 22:49:47 +0000 (15:49 -0700)
The readMVar implementation had only partially implemented
a micro-optimization which allows us to avoid adding an MVar
to the mutable list if the MVar was not changed.  However,
this was not applied to the release method on the fast path,
resulting in dirty MVars which were not added to the mutable list.

Signed-off-by: Edward Z. Yang <ezyang@mit.edu>
rts/PrimOps.cmm

index 648594b..ced15ee 100644 (file)
@@ -1563,7 +1563,7 @@ stg_readMVarzh ( P_ mvar, /* :: MVar a */ )
 
     val = StgMVar_value(mvar);
 
-    unlockClosure(mvar, stg_MVAR_DIRTY_info);
+    unlockClosure(mvar, info);
     return (val);
 }
 
@@ -1579,7 +1579,7 @@ stg_tryReadMVarzh ( P_ mvar, /* :: MVar a */ )
 
     val = StgMVar_value(mvar);
 
-    unlockClosure(mvar, stg_MVAR_DIRTY_info);
+    unlockClosure(mvar, info);
     return (1, val);
 }