This is an automated email from the ASF dual-hosted git repository. yong pushed a commit to branch branch-4.16 in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
commit cec8551b1dbe98a8dceff4c3b80b4088a53314d9 Author: Yan Zhao <[email protected]> AuthorDate: Tue Jun 13 14:30:42 2023 +0800 Fix memory leak of direct memory. (#3983) Descriptions of the changes in this PR: ### Motivation When open a non-exist file for DirectReader, it will throw an exception. The ByteBuf won't release. When close DirectWriter, if the close failed, the ByteBuf also won't release. (cherry picked from commit c8c593ee6d3e1f8970bc90b4b6785ff405c81cc4) --- .../bookie/storage/directentrylogger/DirectReader.java | 3 +-- .../bookie/storage/directentrylogger/DirectWriter.java | 9 +++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/directentrylogger/DirectReader.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/directentrylogger/DirectReader.java index 36d0b263f8..f5076f3484 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/directentrylogger/DirectReader.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/directentrylogger/DirectReader.java @@ -56,8 +56,6 @@ class DirectReader implements LogReader { this.filename = filename; this.maxSaneEntrySize = maxSaneEntrySize; this.readBlockStats = readBlockStats; - - nativeBuffer = new Buffer(nativeIO, bufferSize); closed = false; try { @@ -71,6 +69,7 @@ class DirectReader implements LogReader { .kv("errno", ne.getErrno()).toString()); } refreshMaxOffset(); + nativeBuffer = new Buffer(nativeIO, bufferSize); } @Override diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/directentrylogger/DirectWriter.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/directentrylogger/DirectWriter.java index 17466d1e40..be411982d3 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/directentrylogger/DirectWriter.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/directentrylogger/DirectWriter.java @@ -233,10 +233,11 @@ class DirectWriter implements LogWriter { throw new IOException(exMsg(ne.getMessage()) .kv("file", filename) .kv("errno", ne.getErrno()).toString()); - } - synchronized (bufferLock) { - bufferPool.release(nativeBuffer); - nativeBuffer = null; + } finally { + synchronized (bufferLock) { + bufferPool.release(nativeBuffer); + nativeBuffer = null; + } } }
