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);