@@ -320,14 +320,14 @@ where
321import Control.Concurrent (killThread, myThreadId, takeMVar, threadDelay)
321import Control.Concurrent (killThread, myThreadId, takeMVar, threadDelay)
322import Control.Exception
322import Control.Exception
323− (Exception, SomeException, AsyncException, fromException)
323+ (Exception, SomeException, AsyncException, fromException, mask_)
324import Control.Monad (void, when, forever)
324import Control.Monad (void, when, forever)
325import Control.Monad.Catch (MonadCatch, throwM)
325import Control.Monad.Catch (MonadCatch, throwM)
326import Control.Monad.IO.Class (MonadIO(..))
326import Control.Monad.IO.Class (MonadIO(..))
327import Control.Monad.Reader (ReaderT)
327import Control.Monad.Reader (ReaderT)
328import Control.Monad.State.Strict (StateT)
328import Control.Monad.State.Strict (StateT)
329import Control.Monad.Trans (MonadTrans(lift))
329import Control.Monad.Trans (MonadTrans(lift))
330−import Control.Monad.Trans.Control (MonadBaseControl)
330+import Control.Monad.Trans.Control (MonadBaseControl, liftBaseOp_)
331import Data.Bits (shiftR, shiftL, (.|.), (.&.))
331import Data.Bits (shiftR, shiftL, (.|.), (.&.))
332import Data.Functor.Identity (Identity(..))
332import Data.Functor.Identity (Identity(..))
333import Data.Int (Int64)
333import Data.Int (Int64)
@@ -2951,8 +2951,10 @@ gbracketIO bef exc aft fexc fnormal =
2951 -- weak pointer to us.
2951 -- weak pointer to us.
2952 {-# INLINE_LATE step #-}
2952 {-# INLINE_LATE step #-}
2953 step _ GBracketIOInit = do
2953 step _ GBracketIOInit = do
2954+ (r, ref) <- liftBaseOp_ mask_ $ do
2954− r <- bef
2955+ r <- bef
2955− ref <- newFinalizedIORef (aft r)
2956+ ref <- newFinalizedIORef (aft r)
2956 return $ Skip $ GBracketIONormal (fnormal r) r ref
2958 return $ Skip $ GBracketIONormal (fnormal r) r ref
2958 step gst (GBracketIONormal (UnStream step1 st) v ref) = do
2960 step gst (GBracketIONormal (UnStream step1 st) v ref) = do