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