Author: cbrisson Date: Wed Mar 13 19:59:21 2019 New Revision: 1855453 URL: http://svn.apache.org/viewvc?rev=1855453&view=rev Log: [tools/generic] Fix small concurrency issue in safe tool initialization
Modified: velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/SafeConfig.java Modified: velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/SafeConfig.java URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/SafeConfig.java?rev=1855453&r1=1855452&r2=1855453&view=diff ============================================================================== --- velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/SafeConfig.java (original) +++ velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/SafeConfig.java Wed Mar 13 19:59:21 2019 @@ -26,6 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; /** * <p>Implements common logic and constants for tools which automatically @@ -76,7 +77,7 @@ public class SafeConfig */ public static final String USE_CLASS_LOGGER_KEY = "useClassLogger"; - private boolean configLocked = false; + private AtomicBoolean configLocked = new AtomicBoolean(false); private boolean safeMode = false; protected Logger log = null; @@ -87,7 +88,7 @@ public class SafeConfig */ protected void setLockConfig(boolean lock) { - this.configLocked = lock; + this.configLocked.set(lock); } /** @@ -106,7 +107,7 @@ public class SafeConfig */ public boolean isConfigLocked() { - return this.configLocked; + return this.configLocked.get(); } /** @@ -134,19 +135,25 @@ public class SafeConfig { if (!isConfigLocked()) { - ValueParser values = new ValueParser(params); - - // set up logger - initLogger(values); - - // call configure - configure(values); - - setSafeMode(values.getBoolean(SAFE_MODE_KEY, true)); - - // check under the new key - Boolean lock = values.getBoolean(LOCK_CONFIG_KEY, Boolean.TRUE); - setLockConfig(lock.booleanValue()); + synchronized (this) + { + if (!isConfigLocked()) + { + ValueParser values = new ValueParser(params); + + // set up logger + initLogger(values); + + // call configure + configure(values); + + setSafeMode(values.getBoolean(SAFE_MODE_KEY, true)); + + // check under the new key + Boolean lock = values.getBoolean(LOCK_CONFIG_KEY, Boolean.TRUE); + setLockConfig(lock.booleanValue()); + } + } } }