This is an automated email from the ASF dual-hosted git repository.

jinrongtong pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git


The following commit(s) were added to refs/heads/develop by this push:
     new a6c5604b6c [ISSUE #10046] Fix lock leak risk in sendHeartbeatToBroker 
(#10047)
a6c5604b6c is described below

commit a6c5604b6cb6fce255fe9e0e6e860f94d37c2050
Author: yx9o <[email protected]>
AuthorDate: Thu Feb 5 09:50:22 2026 +0800

    [ISSUE #10046] Fix lock leak risk in sendHeartbeatToBroker (#10047)
---
 .../rocketmq/client/impl/factory/MQClientInstance.java     | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git 
a/client/src/main/java/org/apache/rocketmq/client/impl/factory/MQClientInstance.java
 
b/client/src/main/java/org/apache/rocketmq/client/impl/factory/MQClientInstance.java
index df93155c36..e0b28fef64 100644
--- 
a/client/src/main/java/org/apache/rocketmq/client/impl/factory/MQClientInstance.java
+++ 
b/client/src/main/java/org/apache/rocketmq/client/impl/factory/MQClientInstance.java
@@ -621,14 +621,14 @@ public class MQClientInstance {
      */
     public boolean sendHeartbeatToBroker(long id, String brokerName, String 
addr, boolean strictLockMode) {
         if (this.lockHeartbeat.tryLock()) {
-            final HeartbeatData heartbeatDataWithSub = 
this.prepareHeartbeatData(false);
-            final boolean producerEmpty = 
heartbeatDataWithSub.getProducerDataSet().isEmpty();
-            final boolean consumerEmpty = 
heartbeatDataWithSub.getConsumerDataSet().isEmpty();
-            if (producerEmpty && consumerEmpty) {
-                log.warn("sendHeartbeatToBroker sending heartbeat, but no 
consumer and no producer. [{}]", this.clientId);
-                return false;
-            }
             try {
+                final HeartbeatData heartbeatDataWithSub = 
this.prepareHeartbeatData(false);
+                final boolean producerEmpty = 
heartbeatDataWithSub.getProducerDataSet().isEmpty();
+                final boolean consumerEmpty = 
heartbeatDataWithSub.getConsumerDataSet().isEmpty();
+                if (producerEmpty && consumerEmpty) {
+                    log.warn("sendHeartbeatToBroker sending heartbeat, but no 
consumer and no producer. [{}]", this.clientId);
+                    return false;
+                }
                 if (clientConfig.isUseHeartbeatV2()) {
                     int currentHeartbeatFingerprint = 
heartbeatDataWithSub.computeHeartbeatFingerprint();
                     
heartbeatDataWithSub.setHeartbeatFingerprint(currentHeartbeatFingerprint);

Reply via email to