Fix event processing threading

- Add one extra step to schedule event processing to
  recude risks that machine doesn't do full
  run-to-completion.
- Fixes #419
This commit is contained in:
Janne Valkealahti
2017-11-05 17:09:44 +00:00
parent 39f1e6e7ca
commit 17c9223103

View File

@@ -136,6 +136,9 @@ public class DefaultStateMachineExecutor<S, E> extends LifecycleObjectSupport im
@Override
public void queueDeferredEvent(Message<E> message) {
if (log.isDebugEnabled()) {
log.debug("Deferring message " + message);
}
deferList.addLast(message);
}
@@ -289,7 +292,13 @@ public class DefaultStateMachineExecutor<S, E> 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();
}