Add a bit of strictness to avoid this test getting into a bad state
authorSimon Marlow <marlowsd@gmail.com>
Thu, 20 Nov 2008 12:45:51 +0000 (12:45 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Thu, 20 Nov 2008 12:45:51 +0000 (12:45 +0000)
tests/conc049.hs

index 45c005b..60d5dd1 100644 (file)
@@ -111,9 +111,16 @@ sourceSinkThread accounts = loop True
          let t = accounts ! acct
          atomically_ sourceThreadId $ do
            x <- readTVar t
-           writeTVar t (max 0 (x+amount)) -- never drop below zero, 
+           writeTVar t $! max 0 (x+amount) -- never drop below zero,
                                           -- and don't block.
 
+    -- NB. $! above is necessary to avoid this test getting into a bad
+    -- state.  The sourceSinkThread fills up all the accounts with
+    -- thunks which the other threads have to evaluate.  They'll keep
+    -- getting blocked on each other, and meanwhile the
+    -- sourceSinkThread can keep on filling up the accounts with more
+    -- thunks.
+
 -- -----------------------------------------------------------------------------
 -- Our tracing wrapper for atomically