You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2014/04/27 20:35:46 UTC

svn commit: r1590449 - /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java

Author: mattsicker
Date: Sun Apr 27 18:35:45 2014
New Revision: 1590449

URL: http://svn.apache.org/r1590449
Log:
Convert lock on string to lock on reentrant lock.

Modified:
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java

Modified: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java?rev=1590449&r1=1590448&r2=1590449&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java Sun Apr 27 18:35:45 2014
@@ -32,6 +32,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.TreeSet;
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.config.plugins.util.PluginManager;
@@ -109,6 +111,8 @@ public abstract class ConfigurationFacto
 
     protected final StrSubstitutor substitutor = new StrSubstitutor(new Interpolator());
 
+    private static final Lock LOCK = new ReentrantLock();
+
     /**
      * Returns the ConfigurationFactory.
      * @return the ConfigurationFactory.
@@ -117,8 +121,8 @@ public abstract class ConfigurationFacto
         // volatile works in Java 1.6+, so double-checked locking also works properly
         //noinspection DoubleCheckedLocking
         if (factories == null) {
-            // TODO: synchronize on a real lock
-            synchronized(TEST_PREFIX) {
+            LOCK.lock();
+            try {
                 if (factories == null) {
                     final List<ConfigurationFactory> list = new ArrayList<ConfigurationFactory>();
                     final String factoryClass = PropertiesUtil.getProperties().getStringProperty(CONFIGURATION_FACTORY_PROPERTY);
@@ -147,6 +151,8 @@ public abstract class ConfigurationFacto
                     }
                     factories = Collections.unmodifiableList(list);
                 }
+            } finally {
+                LOCK.unlock();
             }
         }