@@ -1,4 +1,4 @@
1−{-# LANGUAGE RecordWildCards #-}
1+{-# LANGUAGE RecordWildCards, ScopedTypeVariables #-}
22
33------------------------------------------------------------------------------
44-- |
@@ -142,7 +142,7 @@ withTransactionMode :: TransactionMode -> Connection -> IO a -> IO a
142142withTransactionMode mode conn act =
143143 mask $ \restore -> do
144144 beginMode mode conn
145− r <- restore act `E.onException` rollback conn
145+ r <- restore act `E.onException` rollback_ conn
146146 commit conn
147147 return r
148148
@@ -167,7 +167,7 @@ withTransactionModeRetry mode shouldRetry conn act =
167167 r <- act'
168168 case r of
169169 Left e -> do
170− rollback conn
170+ rollback_ conn
171171 case fmap shouldRetry (E.fromException e) of
172172 Just True -> retryLoop act'
173173 _ -> E.throwIO e
@@ -178,6 +178,10 @@ withTransactionModeRetry mode shouldRetry conn act =
178178rollback :: Connection -> IO ()
179179rollback conn = execute_ conn "ABORT" >> return ()
180180
181+-- | Rollback a transaction, ignoring any @IOErrors@
182+rollback_ :: Connection -> IO ()
183+rollback_ conn = rollback conn `E.catch` \(_ :: IOError) -> return ()
184+
181185-- | Commit a transaction.
182186commit :: Connection -> IO ()
183187commit conn = execute_ conn "COMMIT" >> return ()