@@ -18,6 +18,7 @@ module Temporal.Workflow.Internal.Instance (
1818) where
1919
2020import Control.Monad.Reader
21+ import Data.Atomics (atomicModifyIORefCAS )
2122import Data.ProtoLens
2223import qualified Data.Text as T
2324import GHC.Stack
@@ -62,46 +63,46 @@ flushCommands = do
6263nextExternalCancelSequence :: InstanceM Sequence
6364nextExternalCancelSequence = do
6465 inst <- ask
65- atomicModifyIORef' inst. workflowSequences $ \ seqs ->
66+ liftIO $ atomicModifyIORefCAS inst. workflowSequences $ \ seqs ->
6667 let seq' = externalCancel seqs
6768 in (seqs {externalCancel = succ seq'}, Sequence seq')
6869
6970
7071nextChildWorkflowSequence :: InstanceM Sequence
7172nextChildWorkflowSequence = do
7273 inst <- ask
73- atomicModifyIORef' inst. workflowSequences $ \ seqs ->
74+ liftIO $ atomicModifyIORefCAS inst. workflowSequences $ \ seqs ->
7475 let seq' = childWorkflow seqs
7576 in (seqs {childWorkflow = succ seq'}, Sequence seq')
7677
7778
7879nextExternalSignalSequence :: InstanceM Sequence
7980nextExternalSignalSequence = do
8081 inst <- ask
81- atomicModifyIORef' inst. workflowSequences $ \ seqs ->
82+ liftIO $ atomicModifyIORefCAS inst. workflowSequences $ \ seqs ->
8283 let seq' = externalSignal seqs
8384 in (seqs {externalSignal = succ seq'}, Sequence seq')
8485
8586
8687nextTimerSequence :: InstanceM Sequence
8788nextTimerSequence = do
8889 inst <- ask
89- atomicModifyIORef' inst. workflowSequences $ \ seqs ->
90+ liftIO $ atomicModifyIORefCAS inst. workflowSequences $ \ seqs ->
9091 let seq' = timer seqs
9192 in (seqs {timer = succ seq'}, Sequence seq')
9293
9394
9495nextActivitySequence :: InstanceM Sequence
9596nextActivitySequence = do
9697 inst <- ask
97- atomicModifyIORef' inst. workflowSequences $ \ seqs ->
98+ liftIO $ atomicModifyIORefCAS inst. workflowSequences $ \ seqs ->
9899 let seq' = activity seqs
99100 in (seqs {activity = succ seq'}, Sequence seq')
100101
101102
102103nextConditionSequence :: InstanceM Sequence
103104nextConditionSequence = do
104105 inst <- ask
105- atomicModifyIORef' inst. workflowSequences $ \ seqs ->
106+ liftIO $ atomicModifyIORefCAS inst. workflowSequences $ \ seqs ->
106107 let seq' = condition seqs
107108 in (seqs {condition = succ seq'}, Sequence seq')
0 commit comments