@@ -320,14 +320,14 @@ where
320320
321321import Control.Concurrent (killThread, myThreadId, takeMVar, threadDelay)
322322import Control.Exception
323− (Exception, SomeException, AsyncException, fromException)
323+ (Exception, SomeException, AsyncException, fromException, mask_)
324324import Control.Monad (void, when, forever)
325325import Control.Monad.Catch (MonadCatch, throwM)
326326import Control.Monad.IO.Class (MonadIO(..))
327327import Control.Monad.Reader (ReaderT)
328328import Control.Monad.State.Strict (StateT)
329329import Control.Monad.Trans (MonadTrans(lift))
330−import Control.Monad.Trans.Control (MonadBaseControl)
330+import Control.Monad.Trans.Control (MonadBaseControl, liftBaseOp_)
331331import Data.Bits (shiftR, shiftL, (.|.), (.&.))
332332import Data.Functor.Identity (Identity(..))
333333import Data.Int (Int64)
@@ -2951,8 +2951,10 @@ gbracketIO bef exc aft fexc fnormal =
29512951 -- weak pointer to us.
29522952 {-# INLINE_LATE step #-}
29532953 step _ GBracketIOInit = do
2954− r <- bef
2955− ref <- newFinalizedIORef (aft r)
2954+ (r, ref) <- liftBaseOp_ mask_ $ do
2955+ r <- bef
2956+ ref <- newFinalizedIORef (aft r)
2957+ return (r, ref)
29562958 return $ Skip $ GBracketIONormal (fnormal r) r ref
29572959
29582960 step gst (GBracketIONormal (UnStream step1 st) v ref) = do