Repository: activemq
Updated Branches:
  refs/heads/activemq-5.12.x bbb002afd -> 58359a85d


https://issues.apache.org/jira/browse/AMQ-6062

Updated QueueBrowserSubscription to use a ConcurrentMap to avoid a
potential race condition when multiple queue browsers browse
multiple queues.

(cherry picked from commit d346a765e3064a951c5d55119b80b8432a45bcb6)


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/58359a85
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/58359a85
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/58359a85

Branch: refs/heads/activemq-5.12.x
Commit: 58359a85d86f1d578fd706c06763ca6b0cec0a2d
Parents: bbb002a
Author: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com>
Authored: Wed Dec 2 15:51:55 2015 +0000
Committer: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com>
Committed: Wed Dec 2 15:55:37 2015 +0000

----------------------------------------------------------------------
 .../broker/region/QueueBrowserSubscription.java       | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/58359a85/activemq-broker/src/main/java/org/apache/activemq/broker/region/QueueBrowserSubscription.java
----------------------------------------------------------------------
diff --git 
a/activemq-broker/src/main/java/org/apache/activemq/broker/region/QueueBrowserSubscription.java
 
b/activemq-broker/src/main/java/org/apache/activemq/broker/region/QueueBrowserSubscription.java
index 97de921..65f2d7b 100755
--- 
a/activemq-broker/src/main/java/org/apache/activemq/broker/region/QueueBrowserSubscription.java
+++ 
b/activemq-broker/src/main/java/org/apache/activemq/broker/region/QueueBrowserSubscription.java
@@ -18,9 +18,9 @@ package org.apache.activemq.broker.region;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import javax.jms.JMSException;
 
@@ -42,7 +42,7 @@ public class QueueBrowserSubscription extends 
QueueSubscription {
     boolean browseDone;
     boolean destinationsAdded;
 
-    private final Map<MessageId, Object> audit = new HashMap<MessageId, 
Object>();
+    private final ConcurrentMap<MessageId, Object> audit = new 
ConcurrentHashMap<MessageId, Object>();
     private long maxMessages;
 
     public QueueBrowserSubscription(Broker broker, SystemUsage usageManager, 
ConnectionContext context, ConsumerInfo info) throws JMSException {
@@ -67,13 +67,7 @@ public class QueueBrowserSubscription extends 
QueueSubscription {
     }
 
     public boolean isDuplicate(MessageId messageId) {
-
-        if (!audit.containsKey(messageId)) {
-            audit.put(messageId, Boolean.TRUE);
-            return false;
-        }
-
-        return true;
+        return audit.putIfAbsent(messageId, Boolean.TRUE) != null;
     }
 
     private void checkDone() throws Exception {

Reply via email to