From 89e5898a59f64d0468d5d43215d22764c73ff081 Mon Sep 17 00:00:00 2001 From: Zhanhui Li Date: Thu, 29 Dec 2016 14:58:59 +0800 Subject: [PATCH] Fix data race issue --- .../org/apache/rocketmq/client/impl/MQAdminImpl.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/client/src/main/java/org/apache/rocketmq/client/impl/MQAdminImpl.java b/client/src/main/java/org/apache/rocketmq/client/impl/MQAdminImpl.java index fb948b7796b..8267336797c 100644 --- a/client/src/main/java/org/apache/rocketmq/client/impl/MQAdminImpl.java +++ b/client/src/main/java/org/apache/rocketmq/client/impl/MQAdminImpl.java @@ -23,6 +23,9 @@ import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + import org.apache.rocketmq.client.QueryResult; import org.apache.rocketmq.client.exception.MQBrokerException; import org.apache.rocketmq.client.exception.MQClientException; @@ -284,6 +287,7 @@ protected QueryResult queryMessage(String topic, String key, int maxNum, long be if (!brokerAddrs.isEmpty()) { final CountDownLatch countDownLatch = new CountDownLatch(brokerAddrs.size()); + final ReadWriteLock lock = new ReentrantReadWriteLock(); final List queryResultList = new LinkedList(); for (String addr : brokerAddrs) { @@ -318,7 +322,12 @@ public void operationComplete(ResponseFuture responseFuture) { MessageDecoder.decodes(ByteBuffer.wrap(response.getBody()), true); QueryResult qr = new QueryResult(responseHeader.getIndexLastUpdateTimestamp(), wrappers); - queryResultList.add(qr); + try { + lock.writeLock().lock(); + queryResultList.add(qr); + } finally { + lock.writeLock().unlock(); + } break; } default: