@@ -1117,30 +1117,28 @@ execAtomically time tid tlbl nextVid0 action0 k0 =
1117
1117
1118
1118
Retry ->
1119
1119
{-# SCC "execAtomically.go.Retry" #-}
1120
- case ctl of
1121
- AtomicallyFrame -> do
1122
- -- Revert all the TVar writes
1123
- ! _ <- traverse_ (\ (SomeTVar tvar) -> revertTVar tvar) written
1124
- -- Return vars read, so the thread can block on them
1125
- k0 $! StmTxBlocked $! Map. elems read
1126
-
1127
- BranchFrame (OrElseStmA b) k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
1128
- {-# SCC "execAtomically.go.BranchFrame" #-} do
1129
- -- Revert all the TVar writes within this orElse
1130
- ! _ <- traverse_ (\ (SomeTVar tvar) -> revertTVar tvar) written
1131
- -- Execute the orElse right hand with an empty written set
1132
- let ctl'' = BranchFrame NoOpStmA k writtenOuter writtenOuterSeq createdOuterSeq ctl'
1133
- go ctl'' read Map. empty [] [] nextVid b
1134
-
1135
- BranchFrame _ _k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
1136
- {-# SCC "execAtomically.go.BranchFrame" #-} do
1137
- -- Retry makes sense only within a OrElse context. If it is a branch other than
1138
- -- OrElse left side, then bubble up the `retry` to the frame above.
1139
- -- Revert all the TVar writes within this orElse branch
1120
+ do
1121
+ -- Always revert all the TVar writes for the retry
1140
1122
! _ <- traverse_ (\ (SomeTVar tvar) -> revertTVar tvar) written
1141
- -- Skip the continuation and propagate the retry into the outer frame
1142
- -- using the written set for the outer frame
1143
- go ctl' read writtenOuter writtenOuterSeq createdOuterSeq nextVid Retry
1123
+ case ctl of
1124
+ AtomicallyFrame -> do
1125
+ -- Return vars read, so the thread can block on them
1126
+ k0 $! StmTxBlocked $! Map. elems read
1127
+
1128
+ BranchFrame (OrElseStmA b) k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
1129
+ {-# SCC "execAtomically.go.BranchFrame" #-} do
1130
+ ! _ <- traverse_ (\ (SomeTVar tvar) -> revertTVar tvar) written
1131
+ -- Execute the orElse right hand with an empty written set
1132
+ let ctl'' = BranchFrame NoOpStmA k writtenOuter writtenOuterSeq createdOuterSeq ctl'
1133
+ go ctl'' read Map. empty [] [] nextVid b
1134
+
1135
+ BranchFrame _ _k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
1136
+ {-# SCC "execAtomically.go.BranchFrame" #-} do
1137
+ -- Retry makes sense only within a OrElse context. If it is a branch other than
1138
+ -- OrElse left side, then bubble up the `retry` to the frame above.
1139
+ -- Skip the continuation and propagate the retry into the outer frame
1140
+ -- using the written set for the outer frame
1141
+ go ctl' read writtenOuter writtenOuterSeq createdOuterSeq nextVid Retry
1144
1142
1145
1143
OrElse a b k ->
1146
1144
{-# SCC "execAtomically.go.OrElse" #-} do
0 commit comments