You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ju...@apache.org on 2020/11/29 21:54:33 UTC

[jspwiki] 07/11: use ConcurrentHashMap instead of plain HashMap to avoid possible thread safety issues

This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 0f92ee6ae8c8f360cee17f66815f4e08185ab4a4
Author: juanpablo <ju...@apache.org>
AuthorDate: Sun Nov 29 22:37:19 2020 +0100

    use ConcurrentHashMap instead of plain HashMap to avoid possible thread safety issues
---
 .../wiki/references/DefaultReferenceManager.java   | 49 +++++++++-------------
 1 file changed, 20 insertions(+), 29 deletions(-)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/references/DefaultReferenceManager.java b/jspwiki-main/src/main/java/org/apache/wiki/references/DefaultReferenceManager.java
index 7495ab2..64efeae 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/references/DefaultReferenceManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/references/DefaultReferenceManager.java
@@ -39,28 +39,12 @@ import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.render.RenderingManager;
 import org.apache.wiki.util.TextUtil;
 
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
+import java.io.*;
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.ConcurrentModificationException;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 /*
   BUGS
@@ -151,8 +135,8 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
      *  @param engine The Engine to which this is managing references to.
      */
     public DefaultReferenceManager( final Engine engine ) {
-        m_refersTo = new HashMap<>();
-        m_referredBy = new HashMap<>();
+        m_refersTo = new ConcurrentHashMap<>();
+        m_referredBy = new ConcurrentHashMap<>();
         m_engine = engine;
         m_matchEnglishPlurals = TextUtil.getBooleanProperty( engine.getWikiProperties(), Engine.PROP_MATCHPLURALS, false );
 
@@ -639,7 +623,7 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
                 // We add a non-null entry to referredBy to indicate the referred page exists
                 m_referredBy.put( page.getName(), new TreeSet<>() );
                 // Just add a key to refersTo; the keys need to be in sync with referredBy.
-                m_refersTo.put( page.getName(), null );
+                m_refersTo.put( page.getName(), new TreeSet<>() );
             }
         } catch( final ClassCastException e ) {
             log.fatal( "Invalid collection entry in ReferenceManager.buildKeyLists().", e );
@@ -682,7 +666,8 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
      *
      * @param pagename  Name of the page to clear references for.
      */
-    @Override public synchronized void clearPageEntries( String pagename ) {
+    @Override
+    public synchronized void clearPageEntries( String pagename ) {
         pagename = getFinalPageName( pagename );
 
         //  Remove this item from the referredBy list of any page which this item refers to.
@@ -705,7 +690,8 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
      *
      *  @return The Collection of Strings
      */
-    @Override public synchronized Collection< String > findUnreferenced() {
+    @Override
+    public synchronized Collection< String > findUnreferenced() {
         final ArrayList< String > unref = new ArrayList<>();
         for( final String key : m_referredBy.keySet() ) {
             final Set< ? > refs = getReferenceList( m_referredBy, key );
@@ -727,7 +713,8 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
      *
      * @return A Collection of Strings
      */
-    @Override public synchronized Collection< String > findUncreated() {
+    @Override
+    public synchronized Collection< String > findUncreated() {
         final TreeSet< String > uncreated = new TreeSet<>();
 
         // Go through m_refersTo values and check that m_refersTo has the corresponding keys.
@@ -785,7 +772,8 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
      * @param pagename The page to find referrers for.
      * @return A Set of Strings.  May return null, if the page does not exist, or if it has no references.
      */
-    @Override public synchronized Set< String > findReferrers( final String pagename ) {
+    @Override
+    public synchronized Set< String > findReferrers( final String pagename ) {
         final Set< String > refs = getReferenceList( m_referredBy, pagename );
         if( refs == null || refs.isEmpty() ) {
             return null;
@@ -807,7 +795,8 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
      *         not exist or has not been indexed yet.
      * @since 2.2.33
      */
-    @Override public Set< String > findReferredBy( final String pageName ) {
+    @Override
+    public Set< String > findReferredBy( final String pageName ) {
         return m_unmutableReferredBy.get( getFinalPageName(pageName) );
     }
 
@@ -825,7 +814,8 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
      *         does not exist or has not been indexed yet.
      * @since 2.2.33
      */
-    @Override public Collection< String > findRefersTo( final String pageName ) {
+    @Override
+    public Collection< String > findRefersTo( final String pageName ) {
         return m_unmutableRefersTo.get( getFinalPageName( pageName ) );
     }
 
@@ -868,7 +858,8 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
      *  @return A Set of all defined page names that ReferenceManager knows about.
      *  @since 2.3.24
      */
-    @Override public Set< String > findCreated() {
+    @Override
+    public Set< String > findCreated() {
         return new HashSet<>( m_refersTo.keySet() );
     }