Fix a race condition in the GHCi debugger exposed by testcase break011.
authorPaolo Capriotti <p.capriotti@gmail.com>
Thu, 29 Mar 2012 22:19:04 +0000 (23:19 +0100)
committerPaolo Capriotti <p.capriotti@gmail.com>
Wed, 11 Apr 2012 17:42:50 +0000 (18:42 +0100)
compiler/main/InteractiveEval.hs

index 8cc94a3..c87c62b 100644 (file)
@@ -758,11 +758,16 @@ abandonAll = do
 --          with the partial computation, which still ends in takeMVar,
 --          so any attempt to evaluate one of these thunks will block
 --          unless we fill in the MVar.
+--      (c) wait for the thread to terminate by taking its status MVar.  This
+--          step is necessary to prevent race conditions with
+--          -fbreak-on-exception (see #5975).
 --  See test break010.
 abandon_ :: Resume -> IO ()
 abandon_ r = do
   killThread (resumeThreadId r)
   putMVar (resumeBreakMVar r) ()
+  _ <- takeMVar (resumeStatMVar r)
+  return ()
 
 -- -----------------------------------------------------------------------------
 -- Bounded list, optimised for repeated cons