From 9a8f1fdce99283c725112fb1f5fba3632c7836dd Mon Sep 17 00:00:00 2001 From: Bas van Dijk Date: Thu, 14 Oct 2010 21:05:46 +0000 Subject: [PATCH] Use throwIO instead of throw in runInBoundThread and runInUnboundThread --- Control/Concurrent.hs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Control/Concurrent.hs b/Control/Concurrent.hs index 6122a10..f509bc0 100644 --- a/Control/Concurrent.hs +++ b/Control/Concurrent.hs @@ -406,13 +406,10 @@ runInBoundThread action else do ref <- newIORef undefined let action_plus = Exception.try action >>= writeIORef ref - resultOrException <- - bracket (newStablePtr action_plus) - freeStablePtr - (\cEntry -> forkOS_entry_reimported cEntry >> readIORef ref) - case resultOrException of - Left exception -> Exception.throw (exception :: SomeException) - Right result -> return result + bracket (newStablePtr action_plus) + freeStablePtr + (\cEntry -> forkOS_entry_reimported cEntry >> readIORef ref) >>= + unsafeResult | otherwise = failNonThreaded {- | @@ -437,11 +434,11 @@ runInUnboundThread action = do _ <- mask $ \restore -> forkIO $ Exception.try (if b then action else restore action) >>= putMVar mv - takeMVar mv >>= \ei -> case ei of - Left exception -> Exception.throw (exception :: SomeException) - Right result -> return result + takeMVar mv >>= unsafeResult else action +unsafeResult :: Either SomeException a -> IO a +unsafeResult = either Exception.throwIO return #endif /* __GLASGOW_HASKELL__ */ #ifdef __GLASGOW_HASKELL__ -- 1.7.10.4