-{-# OPTIONS_GHC -XNoImplicitPrelude #-}
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+
-----------------------------------------------------------------------------
-- |
-- Module : Control.Concurrent.MVar
-}
readMVar :: MVar a -> IO a
readMVar m =
- block $ do
+ mask_ $ do
a <- takeMVar m
putMVar m a
return a
-}
swapMVar :: MVar a -> a -> IO a
swapMVar mvar new =
- block $ do
+ mask_ $ do
old <- takeMVar mvar
putMVar mvar new
return old
-- http://www.haskell.org//pipermail/haskell/2006-May/017907.html
withMVar :: MVar a -> (a -> IO b) -> IO b
withMVar m io =
- block $ do
+ mask $ \restore -> do
a <- takeMVar m
- b <- unblock (io a) `onException` putMVar m a
+ b <- restore (io a) `onException` putMVar m a
putMVar m a
return b
{-# INLINE modifyMVar_ #-}
modifyMVar_ :: MVar a -> (a -> IO a) -> IO ()
modifyMVar_ m io =
- block $ do
+ mask $ \restore -> do
a <- takeMVar m
- a' <- unblock (io a) `onException` putMVar m a
+ a' <- restore (io a) `onException` putMVar m a
putMVar m a'
{-|
{-# INLINE modifyMVar #-}
modifyMVar :: MVar a -> (a -> IO (a,b)) -> IO b
modifyMVar m io =
- block $ do
+ mask $ \restore -> do
a <- takeMVar m
- (a',b) <- unblock (io a) `onException` putMVar m a
+ (a',b) <- restore (io a) `onException` putMVar m a
putMVar m a'
return b