This is an automated email from the ASF dual-hosted git repository.
zrlw pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.3 by this push:
new e140c061a2 Fix some potential resource leaks (#15454)
e140c061a2 is described below
commit e140c061a2cba43dd41b750d66f70003f0281815
Author: Xu Chengxin <[email protected]>
AuthorDate: Fri Jun 20 18:35:19 2025 +0800
Fix some potential resource leaks (#15454)
---
.../plugin/protoc/DubboProtocCompilerMojo.java | 3 +-
.../org/apache/dubbo/aot/generate/JarScanner.java | 5 ++-
.../remoting/exchange/codec/ExchangeCodec.java | 45 +++++++++++-----------
.../initializer/ConfigZookeeperInitializer.java | 9 ++++-
4 files changed, 34 insertions(+), 28 deletions(-)
diff --git
a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/protoc/DubboProtocCompilerMojo.java
b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/protoc/DubboProtocCompilerMojo.java
index 60a99ea9c0..2d357cecd8 100644
---
a/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/protoc/DubboProtocCompilerMojo.java
+++
b/dubbo-maven-plugin/src/main/java/org/apache/dubbo/maven/plugin/protoc/DubboProtocCompilerMojo.java
@@ -125,8 +125,7 @@ public class DubboProtocCompilerMojo extends AbstractMojo {
public void execute() throws MojoExecutionException, MojoFailureException {
Properties versionMatrix = new Properties();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
- InputStream stream =
loader.getResourceAsStream("version-matrix.properties");
- try {
+ try (InputStream stream =
loader.getResourceAsStream("version-matrix.properties")) {
versionMatrix.load(stream);
} catch (IOException e) {
getLog().warn("Unable to load default version matrix", e);
diff --git
a/dubbo-plugin/dubbo-native/src/main/java/org/apache/dubbo/aot/generate/JarScanner.java
b/dubbo-plugin/dubbo-native/src/main/java/org/apache/dubbo/aot/generate/JarScanner.java
index 86fad8ec6a..396e001580 100644
---
a/dubbo-plugin/dubbo-native/src/main/java/org/apache/dubbo/aot/generate/JarScanner.java
+++
b/dubbo-plugin/dubbo-native/src/main/java/org/apache/dubbo/aot/generate/JarScanner.java
@@ -77,8 +77,9 @@ public class JarScanner {
if ("file".equals(protocol)) {
scanFile(resource.getPath());
} else if ("jar".equals(protocol)) {
- JarFile jar = ((JarURLConnection)
resource.openConnection()).getJarFile();
- scanJar(jar);
+ try (JarFile jar = ((JarURLConnection)
resource.openConnection()).getJarFile()) {
+ scanJar(jar);
+ }
}
}
} catch (Throwable ex) {
diff --git
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/codec/ExchangeCodec.java
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/codec/ExchangeCodec.java
index 4eeccebca7..127ab95a46 100644
---
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/codec/ExchangeCodec.java
+++
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/codec/ExchangeCodec.java
@@ -327,38 +327,39 @@ public class ExchangeCodec extends TelnetCodec {
Bytes.long2bytes(res.getId(), header, 4);
buffer.writerIndex(savedWriteIndex + HEADER_LENGTH);
- ChannelBufferOutputStream bos = new
ChannelBufferOutputStream(buffer);
+ int len;
+ try (ChannelBufferOutputStream bos = new
ChannelBufferOutputStream(buffer)) {
- // encode response data or error message.
- if (status == Response.OK) {
- if (res.isHeartbeat()) {
- // heartbeat response data is always null
- bos.write(CodecSupport.getNullBytesOf(serialization));
- } else {
- ObjectOutput out =
serialization.serialize(channel.getUrl(), bos);
- if (res.isEvent()) {
- encodeEventData(channel, out, res.getResult());
+ // encode response data or error message.
+ if (status == Response.OK) {
+ if (res.isHeartbeat()) {
+ // heartbeat response data is always null
+ bos.write(CodecSupport.getNullBytesOf(serialization));
} else {
- encodeResponseData(channel, out, res.getResult(),
res.getVersion());
+ ObjectOutput out =
serialization.serialize(channel.getUrl(), bos);
+ if (res.isEvent()) {
+ encodeEventData(channel, out, res.getResult());
+ } else {
+ encodeResponseData(channel, out, res.getResult(),
res.getVersion());
+ }
+ out.flushBuffer();
+ if (out instanceof Cleanable) {
+ ((Cleanable) out).cleanup();
+ }
}
+ } else {
+ ObjectOutput out =
serialization.serialize(channel.getUrl(), bos);
+ out.writeUTF(res.getErrorMessage());
out.flushBuffer();
if (out instanceof Cleanable) {
((Cleanable) out).cleanup();
}
}
- } else {
- ObjectOutput out = serialization.serialize(channel.getUrl(),
bos);
- out.writeUTF(res.getErrorMessage());
- out.flushBuffer();
- if (out instanceof Cleanable) {
- ((Cleanable) out).cleanup();
- }
- }
- bos.flush();
- bos.close();
+ bos.flush();
+ len = bos.writtenBytes();
+ }
- int len = bos.writtenBytes();
checkPayload(channel, len);
Bytes.int2bytes(len, header, 12);
// write
diff --git
a/dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/registrycenter/initializer/ConfigZookeeperInitializer.java
b/dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/registrycenter/initializer/ConfigZookeeperInitializer.java
index 67b4f98f79..f2671a05f3 100644
---
a/dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/registrycenter/initializer/ConfigZookeeperInitializer.java
+++
b/dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/registrycenter/initializer/ConfigZookeeperInitializer.java
@@ -25,6 +25,7 @@ import
org.apache.dubbo.test.check.registrycenter.context.ZookeeperContext;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -55,7 +56,9 @@ public class ConfigZookeeperInitializer extends
ZookeeperInitializer {
Properties properties = new Properties();
try {
// use Files.newInputStream instead of new FileInputStream
- properties.load(Files.newInputStream(zooSample.toPath()));
+ try (InputStream is = Files.newInputStream(zooSample.toPath())) {
+ properties.load(is);
+ }
properties.setProperty("clientPort", String.valueOf(clientPort));
properties.setProperty("admin.serverPort",
String.valueOf(availableAdminServerPort));
Path dataDir = Paths.get(zookeeperConf.getParent().toString(),
"data");
@@ -93,7 +96,9 @@ public class ConfigZookeeperInitializer extends
ZookeeperInitializer {
File log4j = Paths.get(zookeeperConf.toString(),
"log4j.properties").toFile();
try {
// use Files.newInputStream instead of new FileInputStream
- properties.load(Files.newInputStream(log4j.toPath()));
+ try (InputStream is = Files.newInputStream(log4j.toPath())) {
+ properties.load(is);
+ }
Path logDir = Paths.get(zookeeperConf.getParent().toString(),
"logs");
if (!Files.exists(logDir)) {
try {