summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2020-06-23 18:29:21 -0400
committerBen Gamari <ben@well-typed.com>2020-08-24 18:04:16 -0400
commit48a4f5dc6a0568a7fe4e24b2a3620a9d78f9ae58 (patch)
tree2a379cee3c686f1f6700b9014c2d311fb8ad044b
parent05550a5abc369e1cc4fc48def532ca9ba9adcad7 (diff)
downloadhaskell-wip/T15616.tar.gz
base: Better error message on invalid getSystemTimerManager callwip/T15616
Previously we would produce a rather unhelpful pattern match failure error in the case where the user called `getSystemTimerManager` in a program which isn't built with `-threaded`. This understandably confused the user in #15616. Fixes #15616.
-rw-r--r--libraries/base/GHC/Event/Thread.hs6
1 files changed, 4 insertions, 2 deletions
diff --git a/libraries/base/GHC/Event/Thread.hs b/libraries/base/GHC/Event/Thread.hs
index 19b6cd4117..fb40cde4d0 100644
--- a/libraries/base/GHC/Event/Thread.hs
+++ b/libraries/base/GHC/Event/Thread.hs
@@ -19,6 +19,7 @@ module GHC.Event.Thread
import Control.Exception (finally, SomeException, toException)
import Data.Foldable (forM_, mapM_, sequence_)
import Data.IORef (IORef, newIORef, readIORef, writeIORef)
+import Data.Maybe (fromMaybe)
import Data.Tuple (snd)
import Foreign.C.Error (eBADF, errnoToIOError)
import Foreign.C.Types (CInt(..), CUInt(..))
@@ -213,8 +214,9 @@ ioManagerLock = unsafePerformIO $ do
getSystemTimerManager :: IO TM.TimerManager
getSystemTimerManager = do
- Just mgr <- readIORef timerManager
- return mgr
+ fromMaybe err `fmap` readIORef timerManager
+ 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)