From: Bas van Dijk Date: Thu, 14 Oct 2010 21:05:46 +0000 (+0000) Subject: Use throwIO instead of throw in runInBoundThread and runInUnboundThread X-Git-Tag: ghc-darcs-git-switchover~82 X-Git-Url: http://git.megacz.com/?p=ghc-base.git;a=commitdiff_plain;h=9a8f1fdce99283c725112fb1f5fba3632c7836dd Use throwIO instead of throw in runInBoundThread and runInUnboundThread --- 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__