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:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user