X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Foreign%2FMarshal%2FPool.hs;h=f15d048a9518b13a2cdb2f0f82d311a993e47f5a;hb=4c29f6f110d23b890567b8696a964bb212eba52e;hp=47e4f867c1433d8c105781fedf3183e33d877e37;hpb=3f6fd26597b7c0e45a8ac51aa07ff1f07b8f7111;p=ghc-base.git diff --git a/Foreign/Marshal/Pool.hs b/Foreign/Marshal/Pool.hs index 47e4f86..f15d048 100644 --- a/Foreign/Marshal/Pool.hs +++ b/Foreign/Marshal/Pool.hs @@ -48,7 +48,7 @@ module Foreign.Marshal.Pool ( import GHC.Base ( Int, Monad(..), (.), not ) import GHC.Err ( undefined ) import GHC.Exception ( throw ) -import GHC.IO ( IO, block, unblock, catchAny ) +import GHC.IO ( IO, mask, catchAny ) import GHC.IORef ( IORef, newIORef, readIORef, writeIORef ) import GHC.List ( elem, length ) import GHC.Num ( Num(..) ) @@ -97,10 +97,10 @@ freePool (Pool pool) = readIORef pool >>= freeAll withPool :: (Pool -> IO b) -> IO b #ifdef __GLASGOW_HASKELL__ withPool act = -- ATTENTION: cut-n-paste from Control.Exception below! - block (do + mask (\restore -> do pool <- newPool val <- catchAny - (unblock (act pool)) + (restore (act pool)) (\e -> do freePool pool; throw e) freePool pool return val)