Author: markt
Date: Tue Sep 15 13:26:32 2015
New Revision: 1703192

URL: http://svn.apache.org/r1703192
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58383
Fix data race on getSenderState

Modified:
    tomcat/trunk/java/org/apache/catalina/tribes/transport/SenderState.java

Modified: 
tomcat/trunk/java/org/apache/catalina/tribes/transport/SenderState.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/transport/SenderState.java?rev=1703192&r1=1703191&r2=1703192&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/transport/SenderState.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/transport/SenderState.java Tue 
Sep 15 13:26:32 2015
@@ -14,51 +14,39 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.catalina.tribes.transport;
 
-import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.catalina.tribes.Member;
 
-
-/**
- *
- * @version 1.0
- * @since 5.5.16
- */
-
 public class SenderState {
 
     public static final int READY = 0;
     public static final int SUSPECT = 1;
     public static final int FAILING = 2;
 
-    protected static final HashMap<Member, SenderState> memberStates =
-            new HashMap<>();
+    protected static final Map<Member, SenderState> memberStates = new 
ConcurrentHashMap<>();
 
     public static SenderState getSenderState(Member member) {
-        return getSenderState(member,true);
+        return getSenderState(member, true);
     }
 
     public static SenderState getSenderState(Member member, boolean create) {
         SenderState state = memberStates.get(member);
-        if ( state == null && create) {
-            synchronized ( memberStates ) {
-                state = memberStates.get(member);
-                if ( state == null ) {
-                    state = new SenderState();
-                    memberStates.put(member,state);
-                }
+        if (state == null && create) {
+            state = new SenderState();
+            SenderState current = memberStates.putIfAbsent(member, state);
+            if (current != null) {
+                state = current;
             }
         }
         return state;
     }
 
     public static void removeSenderState(Member member) {
-        synchronized ( memberStates ) {
-            memberStates.remove(member);
-        }
+        memberStates.remove(member);
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to