diff options
Diffstat (limited to 'libraries/base/GHC/Event/Thread.hs')
-rw-r--r-- | libraries/base/GHC/Event/Thread.hs | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/libraries/base/GHC/Event/Thread.hs b/libraries/base/GHC/Event/Thread.hs index fb40cde4d0..367791354f 100644 --- a/libraries/base/GHC/Event/Thread.hs +++ b/libraries/base/GHC/Event/Thread.hs @@ -197,8 +197,7 @@ eventManager = unsafePerformIO $ do {-# NOINLINE eventManager #-} numEnabledEventManagers :: IORef Int -numEnabledEventManagers = unsafePerformIO $ do - newIORef 0 +numEnabledEventManagers = unsafePerformIO $ newIORef 0 {-# NOINLINE numEnabledEventManagers #-} foreign import ccall unsafe "getOrSetSystemEventThreadIOManagerThreadStore" @@ -213,10 +212,10 @@ ioManagerLock = unsafePerformIO $ do sharedCAF m getOrSetSystemEventThreadIOManagerThreadStore getSystemTimerManager :: IO TM.TimerManager -getSystemTimerManager = do +getSystemTimerManager = fromMaybe err `fmap` readIORef timerManager - where - err = error "GHC.Event.Thread.getSystemTimerManager: the TimerManager requires linking against the threaded runtime" + where + err = error "GHC.Event.Thread.getSystemTimerManager: the TimerManager requires linking against the threaded runtime" foreign import ccall unsafe "getOrSetSystemTimerThreadEventManagerStore" getOrSetSystemTimerThreadEventManagerStore :: Ptr a -> IO (Ptr a) @@ -325,7 +324,7 @@ startTimerManagerThread = modifyMVar_ timerManagerThreadVar $ \old -> do foreign import ccall unsafe "rtsSupportsBoundThreads" threaded :: Bool ioManagerCapabilitiesChanged :: IO () -ioManagerCapabilitiesChanged = do +ioManagerCapabilitiesChanged = withMVar ioManagerLock $ \_ -> do new_n_caps <- getNumCapabilities numEnabled <- readIORef numEnabledEventManagers |