From 6bef10a5c04947569c7d2380daa726b3b90a2c99 Mon Sep 17 00:00:00 2001 From: ross Date: Wed, 22 Jan 2003 14:44:50 +0000 Subject: [PATCH] [project @ 2003-01-22 14:44:50 by ross] simpler swapMVar (like readMVar): no need to unblock for a return. --- Control/Concurrent/MVar.hs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Control/Concurrent/MVar.hs b/Control/Concurrent/MVar.hs index bf9fc5c..4dfac5a 100644 --- a/Control/Concurrent/MVar.hs +++ b/Control/Concurrent/MVar.hs @@ -36,7 +36,6 @@ module Control.Concurrent.MVar #ifdef __HUGS__ import Hugs.ConcBase ( MVar, newEmptyMVar, newMVar, takeMVar, putMVar, tryTakeMVar, tryPutMVar, isEmptyMVar, - readMVar, swapMVar, ) import Hugs.Exception ( throwIO ) #endif @@ -56,7 +55,6 @@ throw :: Exception -> IO a throw = throwIO #endif -#ifdef __GLASGOW_HASKELL__ {-| This is a combination of 'takeMVar' and 'putMVar'; ie. it takes the value from the 'MVar', puts it back, and also returns it. @@ -70,8 +68,11 @@ readMVar m = -- |Swap the contents of an 'MVar' for a new value. swapMVar :: MVar a -> a -> IO a -swapMVar mvar new = modifyMVar mvar (\old -> return (new,old)) -#endif +swapMVar mvar new = + block $ do + old <- takeMVar mvar + putMVar mvar new + return old {-| 'withMVar' is a safe wrapper for operating on the contents of an -- 1.7.10.4