Fix deadlock on second call to newSession
authorSimon Marlow <simonmar@microsoft.com>
Mon, 16 Oct 2006 11:17:41 +0000 (11:17 +0000)
committerSimon Marlow <simonmar@microsoft.com>
Mon, 16 Oct 2006 11:17:41 +0000 (11:17 +0000)
Tracked down by Krasimir Angelov

compiler/main/GHC.hs
compiler/utils/Panic.lhs

index 6295d7d..eabcafc 100644 (file)
@@ -333,7 +333,7 @@ newSession :: GhcMode -> Maybe FilePath -> IO Session
 newSession mode mb_top_dir = do
   -- catch ^C
   main_thread <- myThreadId
-  putMVar interruptTargetThread [main_thread]
+  modifyMVar_ interruptTargetThread (return . (main_thread :))
   installSignalHandlers
 
   dflags0 <- initSysTools mb_top_dir defaultDynFlags
index 42bf8b5..eb3ce78 100644 (file)
@@ -40,7 +40,7 @@ import GHC.ConsoleHandler
 #endif
 
 import Control.Exception hiding (try)
-import Control.Concurrent ( myThreadId, MVar, ThreadId, withMVar, newEmptyMVar )
+import Control.Concurrent ( myThreadId, MVar, ThreadId, withMVar, newMVar )
 import Data.Dynamic
 import qualified Control.Exception as Exception
 import Debug.Trace     ( trace )
@@ -237,5 +237,5 @@ installSignalHandlers = do
 
 {-# NOINLINE interruptTargetThread #-}
 interruptTargetThread :: MVar [ThreadId]
-interruptTargetThread = unsafePerformIO newEmptyMVar
+interruptTargetThread = unsafePerformIO (newMVar [])
 \end{code}