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: [email protected]
For additional commands, e-mail: [email protected]