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());
+ }
+ }
}
}