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
This commit is contained in:
Janne Valkealahti
2017-11-05 17:14:48 +00:00
parent f8b7c0dae0
commit 42ffc19df9

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();
}