File tree Expand file tree Collapse file tree 3 files changed +14
-9
lines changed Expand file tree Collapse file tree 3 files changed +14
-9
lines changed Original file line number Diff line number Diff line change @@ -935,13 +935,16 @@ execAtomically !time !tid !tlbl !nextVid0 action0 k0 =
935
935
BranchFrame (CatchStmA h) k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
936
936
{-# SCC "execAtomically.go.BranchFrame" #-} do
937
937
-- Execute the left side in a new frame with an empty written set.
938
- -- Rollback `TVar`s written since catch handler was installed,
939
938
-- but preserve ones that were set prior to it, as specified in the
940
939
-- [stm](https://hackage.haskell.org/package/stm/docs/Control-Monad-STM.html#v:catchSTM) package.
941
940
let ctl'' = BranchFrame NoOpStmA k writtenOuter writtenOuterSeq createdOuterSeq ctl'
942
941
go ctl'' read Map. empty [] [] nextVid (h e)
943
- --
944
- BranchFrame _ _k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
942
+
943
+ BranchFrame (OrElseStmA _r) _k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
944
+ {-# SCC "execAtomically.go.BranchFrame" #-} do
945
+ go ctl' read writtenOuter writtenOuterSeq createdOuterSeq nextVid (ThrowStm e)
946
+
947
+ BranchFrame NoOpStmA _k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
945
948
{-# SCC "execAtomically.go.BranchFrame" #-} do
946
949
go ctl' read writtenOuter writtenOuterSeq createdOuterSeq nextVid (ThrowStm e)
947
950
Original file line number Diff line number Diff line change @@ -346,10 +346,9 @@ instance MonadCatch (STM s) where
346
346
Nothing -> throwIO e -- Rethrow the exception if handler does not handle it.
347
347
Just e' -> h e'
348
348
349
- -- STM actions are always run inside `execAtomically` and behave as if masked
350
- -- Another point to note that the default implementation of `generalBracket` needs
351
- -- mask, and is part of `MonadThrow`. For STM, we don't need masking because
352
- -- async exceptions are handled outside of `execAtomically`.
349
+ -- Masking is not required as STM actions are always run inside
350
+ -- `execAtomically` and behave as if masked. Also note that the default
351
+ -- implementation of `generalBracket` needs mask, and is part of `MonadThrow`.
353
352
generalBracket acquire release use = do
354
353
resource <- acquire
355
354
b <- use resource `catch` \ e -> do
Original file line number Diff line number Diff line change @@ -1181,13 +1181,16 @@ execAtomically time tid tlbl nextVid0 action0 k0 =
1181
1181
BranchFrame (CatchStmA h) k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
1182
1182
{-# SCC "execAtomically.go.BranchFrame" #-} do
1183
1183
-- Execute the left side in a new frame with an empty written set.
1184
- -- Rollback `TVar`s written since catch handler was installed,
1185
1184
-- but preserve ones that were set prior to it, as specified in the
1186
1185
-- [stm](https://hackage.haskell.org/package/stm/docs/Control-Monad-STM.html#v:catchSTM) package.
1187
1186
let ctl'' = BranchFrame NoOpStmA k writtenOuter writtenOuterSeq createdOuterSeq ctl'
1188
1187
go ctl'' read Map. empty [] [] nextVid (h e)
1189
1188
1190
- BranchFrame _ _k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
1189
+ BranchFrame (OrElseStmA _r) _k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
1190
+ {-# SCC "execAtomically.go.BranchFrame" #-} do
1191
+ go ctl' read writtenOuter writtenOuterSeq createdOuterSeq nextVid (ThrowStm e)
1192
+
1193
+ BranchFrame NoOpStmA _k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
1191
1194
{-# SCC "execAtomically.go.BranchFrame" #-} do
1192
1195
go ctl' read writtenOuter writtenOuterSeq createdOuterSeq nextVid (ThrowStm e)
1193
1196
You can’t perform that action at this time.
0 commit comments