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 {

Reply via email to