diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorContainer.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorContainer.java index ef9a546a50781..f9591d9ee6aba 100644 --- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorContainer.java +++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorContainer.java @@ -105,11 +105,21 @@ private boolean shouldTrackInHeap(ManagedCursor cursor) { } public PositionImpl getSlowestReadPositionForActiveCursors() { - return heap.isEmpty() ? null : (PositionImpl) heap.get(0).cursor.getReadPosition(); + long stamp = rwLock.readLock(); + try { + return heap.isEmpty() ? null : (PositionImpl) heap.get(0).cursor.getReadPosition(); + } finally { + rwLock.unlockRead(stamp); + } } public PositionImpl getSlowestMarkDeletedPositionForActiveCursors() { - return heap.isEmpty() ? null : (PositionImpl) heap.get(0).cursor.getMarkDeletedPosition(); + long stamp = rwLock.readLock(); + try { + return heap.isEmpty() ? null : (PositionImpl) heap.get(0).cursor.getMarkDeletedPosition(); + } finally { + rwLock.unlockRead(stamp); + } } public ManagedCursor get(String name) {