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 {