You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by yo...@apache.org on 2023/06/19 07:42:54 UTC
[bookkeeper] 30/31: Fix memory leak of direct memory. (#3983)
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 <ho...@apache.org>
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;
+ }
}
}