Author: jahewson
Date: Fri Jul 17 00:21:35 2015
New Revision: 1691465

URL: http://svn.apache.org/r1691465
Log:
PDFBOX-2862: Avoid concurrent access of nameToUnicode map

Modified:
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java?rev=1691465&r1=1691464&r2=1691465&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java
 Fri Jul 17 00:21:35 2015
@@ -91,8 +91,12 @@ public final class GlyphList
         return ZAPF_DINGBATS;
     }
 
+    // read-only mappings, never modified outside GlyphList's constructor
     private final Map<String, String> nameToUnicode;
     private final Map<String, String> unicodeToName;
+    
+    // additional read/write cache for uniXXXX names
+    private final Map<String, String> uniNameToUnicodeCache = new 
HashMap<String, String>();
 
     /**
      * Creates a new GlyphList from a glyph list file.
@@ -217,6 +221,13 @@ public final class GlyphList
         }
 
         String unicode = nameToUnicode.get(name);
+        if (unicode != null)
+        {
+            return unicode;
+        }
+        
+        // separate read/write cache for thread safety
+        unicode = uniNameToUnicodeCache.get(name);
         if (unicode == null)
         {
             // test if we have a suffix and if so remove it
@@ -270,7 +281,7 @@ public final class GlyphList
                     LOG.warn("Not a number in Unicode character name: " + 
name);
                 }
             }
-            nameToUnicode.put(name, unicode);
+            uniNameToUnicodeCache.put(name, unicode);
         }
         return unicode;
     }


Reply via email to