@@ -47,16 +47,18 @@ withSavepoint (Savepoint savepoint) m = do
4747
4848----------------------------------------
4949
50- -- Note: below functions that modify transaction state need to not be
51- -- interruptible so we don't end up in unexpected transaction state.
50+ -- Note: sql queries in below functions that modify transaction state need to
51+ -- not be interruptible so we don't end up in unexpected transaction
52+ -- state. However, getConnectionAcquisitionMode should be interruptible to not
53+ -- lead to deadlocks if a connection ends up being used from multiple threads.
5254
5355-- | Begin transaction using given transaction settings.
5456begin :: (HasCallStack , MonadDB m , MonadMask m ) => m ()
55- begin = uninterruptibleMask_ $ do
57+ begin = do
5658 getConnectionAcquisitionMode >>= \ case
5759 AcquireOnDemand -> do
5860 throwDB $ HPQTypesError " Can't begin a transaction in OnDemand mode"
59- AcquireAndHold isolationLevel permissions -> do
61+ AcquireAndHold isolationLevel permissions -> uninterruptibleMask_ $ do
6062 runSQL_ $
6163 smconcat
6264 [ " BEGIN"
@@ -73,21 +75,21 @@ begin = uninterruptibleMask_ $ do
7375
7476-- | Commit active transaction using given transaction settings.
7577commit :: (HasCallStack , MonadDB m , MonadMask m ) => m ()
76- commit = uninterruptibleMask_ $ do
78+ commit = do
7779 getConnectionAcquisitionMode >>= \ case
7880 AcquireOnDemand -> do
7981 throwDB $ HPQTypesError " Can't commit a transaction in OnDemand mode"
80- AcquireAndHold {} -> do
82+ AcquireAndHold {} -> uninterruptibleMask_ $ do
8183 runSQL_ " COMMIT"
8284 begin
8385
8486-- | Rollback active transaction using given transaction settings.
8587rollback :: (HasCallStack , MonadDB m , MonadMask m ) => m ()
86- rollback = uninterruptibleMask_ $ do
88+ rollback = do
8789 getConnectionAcquisitionMode >>= \ case
8890 AcquireOnDemand -> do
8991 throwDB $ HPQTypesError " Can't rollback a transaction in OnDemand mode"
90- AcquireAndHold {} -> do
92+ AcquireAndHold {} -> uninterruptibleMask_ $ do
9193 runSQL_ " ROLLBACK"
9294 begin
9395
0 commit comments