From ce8b75de58cca46dade40d76d5d421be5ff808ba Mon Sep 17 00:00:00 2001 From: Pascal Davoust Date: Mon, 22 Mar 2021 09:40:02 +0100 Subject: [PATCH] [WW-5121] Fix: remove contention during Scope.SINGLETON injection --- .../java/com/opensymphony/xwork2/inject/Scope.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/inject/Scope.java b/core/src/main/java/com/opensymphony/xwork2/inject/Scope.java index 86592bbe1..3974d6c8b 100644 --- a/core/src/main/java/com/opensymphony/xwork2/inject/Scope.java +++ b/core/src/main/java/com/opensymphony/xwork2/inject/Scope.java @@ -44,15 +44,17 @@ public enum Scope { @Override InternalFactory scopeFactory(Class type, String name, final InternalFactory factory) { return new InternalFactory() { - T instance; + volatile T instance; public T create(InternalContext context) { - synchronized (context.getContainer()) { - if (instance == null) { - instance = InitializableFactory.wrapIfNeeded(factory).create(context); + if (instance == null) { + synchronized (context.getContainer()) { + if (instance == null) { + instance = InitializableFactory.wrapIfNeeded(factory).create(context); + } } - return instance; } + return instance; } @Override