66import java .net .URL ;
77import java .util .*;
88import java .util .concurrent .ConcurrentHashMap ;
9- import java .util .concurrent .atomic .AtomicBoolean ;
10- import java .util .logging .Level ;
119
1210import com .microsoft .azure .functions .internal .spi .middleware .Middleware ;
1311import com .microsoft .azure .functions .rpc .messages .*;
@@ -35,9 +33,10 @@ public class JavaFunctionBroker {
3533 private final Map <String , ImmutablePair <String , FunctionDefinition >> methods ;
3634 private final ClassLoaderProvider classLoaderProvider ;
3735 private String workerDirectory ;
38- private final AtomicBoolean oneTimeLogicInitialized = new AtomicBoolean ( false ) ;
36+ private volatile boolean oneTimeLogicInitialized = false ;
3937 private volatile InvocationChainFactory invocationChainFactory ;
4038 private volatile FunctionInstanceInjector functionInstanceInjector ;
39+ private final Object oneTimeLogicInitializationLock = new Object ();
4140
4241 private FunctionInstanceInjector newInstanceInjector () {
4342 return new FunctionInstanceInjector () {
@@ -63,9 +62,14 @@ public void loadMethod(FunctionMethodDescriptor descriptor, Map<String, BindingI
6362 }
6463
6564 private void initializeOneTimeLogics () {
66- if (!oneTimeLogicInitialized .getAndSet (true )) {
67- initializeInvocationChainFactory ();
68- initializeFunctionInstanceInjector ();
65+ if (!oneTimeLogicInitialized ) {
66+ synchronized (oneTimeLogicInitializationLock ) {
67+ if (!oneTimeLogicInitialized ) {
68+ initializeInvocationChainFactory ();
69+ initializeFunctionInstanceInjector ();
70+ oneTimeLogicInitialized = true ;
71+ }
72+ }
6973 }
7074 }
7175
0 commit comments