From 0a760f5bc049922a262d8a34f0027f886f888ec1 Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Sat, 25 May 2019 15:51:14 +0100 Subject: [PATCH] Relax sync in DefaultStateMachineService - Now starting machine outside of a sycn block with acquire vs. release. This should allow long running start in a machine to allow next acquire to work faster. - Fixes #770 --- .../statemachine/service/DefaultStateMachineService.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/service/DefaultStateMachineService.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/service/DefaultStateMachineService.java index cba0feba..a96cf015 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/service/DefaultStateMachineService.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/service/DefaultStateMachineService.java @@ -84,8 +84,10 @@ public class DefaultStateMachineService implements StateMachineService acquireStateMachine(String machineId, boolean start) { log.info("Acquiring machine with id " + machineId); + StateMachine stateMachine; + // naive sync to handle concurrency with release synchronized (machines) { - StateMachine stateMachine = machines.get(machineId); + stateMachine = machines.get(machineId); if (stateMachine == null) { log.info("Getting new machine from factory with id " + machineId); stateMachine = stateMachineFactory.getStateMachine(machineId); @@ -100,8 +102,9 @@ public class DefaultStateMachineService implements StateMachineService