You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2016/07/07 18:29:20 UTC
svn commit: r1751824 -
/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java
Author: tilman
Date: Thu Jul 7 18:29:20 2016
New Revision: 1751824
URL: http://svn.apache.org/viewvc?rev=1751824&view=rev
Log:
PDFBOX-3404: drop concurrent HashSet, synchronize initialization instead
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java?rev=1751824&r1=1751823&r2=1751824&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java Thu Jul 7 18:29:20 2016
@@ -18,9 +18,9 @@ package org.apache.pdfbox.pdmodel.font.e
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.common.COSObjectable;
@@ -109,8 +109,15 @@ public abstract class Encoding implement
// otherwise /Differences won't be accounted for
if (names == null)
{
- names = Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>());
- names.addAll(codeToName.values());
+ synchronized(this)
+ {
+ // PDFBOX-3404: avoid possibility that one thread ends up with newly created empty map from other thread
+ Set<String> tmpSet = new HashSet<String>(codeToName.values());
+ // make sure that assignment is done after initialisation is complete
+ names = tmpSet;
+ // note that it might still happen that 'names' is initialized twice, but this is harmless
+ }
+ // at this point, names will never be null.
}
return names.contains(name);
}