Bugfix [3608470]: Configuration.getEncoding(Locale) wasn't thread-safe if it was called with Locale variations that weren't registered and a less specific matching entry was found.
diff --git a/src/main/java/freemarker/template/Configuration.java b/src/main/java/freemarker/template/Configuration.java
index 4623050..50eecb7 100644
--- a/src/main/java/freemarker/template/Configuration.java
+++ b/src/main/java/freemarker/template/Configuration.java
@@ -67,6 +67,7 @@
 import java.util.Set;
 import java.util.SortedMap;
 import java.util.TreeMap;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.servlet.ServletContext;
 
@@ -137,7 +138,7 @@
 
     private TemplateCache cache;
     private HashMap variables = new HashMap();
-    private HashMap encodingMap = new HashMap();
+    private Map encodingMap = new ConcurrentHashMap();
     private Map autoImportMap = new HashMap();
     private ArrayList autoImports = new ArrayList(), autoIncludes = new ArrayList();
     private String defaultEncoding = SecurityUtilities.getSystemProperty("file.encoding");