X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Control%2FConcurrent%2FQSemN.hs;h=30c6785d31c22d83177d9aae80d1326598d0f50c;hb=4c29f6f110d23b890567b8696a964bb212eba52e;hp=df3fa4207b754958c8d523f71a4e66beeb2ef10f;hpb=1127922b72ce9f2e57dd4e77e303be6804ae9c3a;p=ghc-base.git diff --git a/Control/Concurrent/QSemN.hs b/Control/Concurrent/QSemN.hs index df3fa42..30c6785 100644 --- a/Control/Concurrent/QSemN.hs +++ b/Control/Concurrent/QSemN.hs @@ -24,7 +24,7 @@ module Control.Concurrent.QSemN import Prelude import Control.Concurrent.MVar -import Control.Exception ( block ) +import Control.Exception ( mask_ ) import Data.Typeable #include "Typeable.h" @@ -46,7 +46,7 @@ newQSemN initial = -- |Wait for the specified quantity to become available waitQSemN :: QSemN -> Int -> IO () -waitQSemN (QSemN sem) sz = block $ do +waitQSemN (QSemN sem) sz = mask_ $ do (avail,blocked) <- takeMVar sem -- gain ex. access let remaining = avail - sz if remaining >= 0 then @@ -60,7 +60,7 @@ waitQSemN (QSemN sem) sz = block $ do -- |Signal that a given quantity is now available from the 'QSemN'. signalQSemN :: QSemN -> Int -> IO () -signalQSemN (QSemN sem) n = block $ do +signalQSemN (QSemN sem) n = mask_ $ do (avail,blocked) <- takeMVar sem (avail',blocked') <- free (avail+n) blocked avail' `seq` putMVar sem (avail',blocked')