diff --git a/client/src/main/java/org/apache/rocketmq/client/impl/consumer/ProcessQueue.java b/client/src/main/java/org/apache/rocketmq/client/impl/consumer/ProcessQueue.java index bc1b5eff2f9..a0387b5c1c6 100644 --- a/client/src/main/java/org/apache/rocketmq/client/impl/consumer/ProcessQueue.java +++ b/client/src/main/java/org/apache/rocketmq/client/impl/consumer/ProcessQueue.java @@ -430,8 +430,10 @@ public void incTryUnlockTimes() { } public void fillProcessQueueInfo(final ProcessQueueInfo info) { + boolean lockAcquired = false; try { this.treeMapLock.readLock().lockInterruptibly(); + lockAcquired = true; if (!this.msgTreeMap.isEmpty()) { info.setCachedMsgMinOffset(this.msgTreeMap.firstKey()); @@ -454,8 +456,11 @@ public void fillProcessQueueInfo(final ProcessQueueInfo info) { info.setLastPullTimestamp(this.lastPullTimestamp); info.setLastConsumeTimestamp(this.lastConsumeTimestamp); } catch (Exception e) { + log.error("fillProcessQueueInfo exception", e); } finally { - this.treeMapLock.readLock().unlock(); + if (lockAcquired) { + this.treeMapLock.readLock().unlock(); + } } }