From 42ffc19df911711b267a3fe21d0cadbaa85af481 Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Sun, 5 Nov 2017 17:14:48 +0000 Subject: [PATCH] Fix event processing threading - Add one extra step to schedule event processing to recude risks that machine doesn't do full run-to-completion. - Backport #419 - Relates #420 --- .../support/DefaultStateMachineExecutor.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/support/DefaultStateMachineExecutor.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/support/DefaultStateMachineExecutor.java index 6aee2a2b..65dd4d40 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/support/DefaultStateMachineExecutor.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/support/DefaultStateMachineExecutor.java @@ -136,6 +136,9 @@ public class DefaultStateMachineExecutor extends LifecycleObjectSupport im @Override public void queueDeferredEvent(Message message) { + if (log.isDebugEnabled()) { + log.debug("Deferring message " + message); + } deferList.addLast(message); } @@ -289,7 +292,13 @@ public class DefaultStateMachineExecutor extends LifecycleObjectSupport im processTriggerQueue(); } } + + if (requestTask.getAndSet(false)) { + scheduleEventQueueProcessing(); + } taskRef.set(null); + // do second attempt which should reduse risk + // of threading causing failed run to completion if (requestTask.getAndSet(false)) { scheduleEventQueueProcessing(); }