Merge pull request #478 from davoustp/contention-in-singleton-injection-2.6.x
[WW-5121] Fix: remove contention during Scope.SINGLETON injection
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 86592bb..3974d6c 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 @@
@Override
<T> InternalFactory<? extends T> scopeFactory(Class<T> type, String name, final InternalFactory<? extends T> factory) {
return new InternalFactory<T>() {
- 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