[tomcat] branch master updated: Make sure the socket is always cleaned up

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[tomcat] branch master updated: Make sure the socket is always cleaned up

remm
This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/master by this push:
     new 9768ef8  Make sure the socket is always cleaned up
9768ef8 is described below

commit 9768ef82f4481c83d25b495fcc959f6d92bbc4a2
Author: remm <[hidden email]>
AuthorDate: Fri Jan 8 16:51:17 2021 +0100

    Make sure the socket is always cleaned up
   
    Cleanup according to the style used for BindState.
---
 .../apache/tomcat/util/net/AbstractEndpoint.java    | 21 +++++++++++++++------
 java/org/apache/tomcat/util/net/NioEndpoint.java    | 17 ++++++++++-------
 2 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/java/org/apache/tomcat/util/net/AbstractEndpoint.java b/java/org/apache/tomcat/util/net/AbstractEndpoint.java
index 55356f9..83b9715 100644
--- a/java/org/apache/tomcat/util/net/AbstractEndpoint.java
+++ b/java/org/apache/tomcat/util/net/AbstractEndpoint.java
@@ -124,20 +124,26 @@ public abstract class AbstractEndpoint<S,U> {
     }
 
     protected enum BindState {
-        UNBOUND(false),
-        BOUND_ON_INIT(true),
-        BOUND_ON_START(true),
-        SOCKET_CLOSED_ON_STOP(false);
+        UNBOUND(false, false),
+        BOUND_ON_INIT(true, true),
+        BOUND_ON_START(true, true),
+        SOCKET_CLOSED_ON_STOP(false, true);
 
         private final boolean bound;
+        private final boolean wasBound;
 
-        private BindState(boolean bound) {
+        private BindState(boolean bound, boolean wasBound) {
             this.bound = bound;
+            this.wasBound = wasBound;
         }
 
         public boolean isBound() {
             return bound;
         }
+
+        public boolean wasBound() {
+            return wasBound;
+        }
     }
 
 
@@ -586,7 +592,10 @@ public abstract class AbstractEndpoint<S,U> {
     private boolean bindOnInit = true;
     public boolean getBindOnInit() { return bindOnInit; }
     public void setBindOnInit(boolean b) { this.bindOnInit = b; }
-    protected volatile BindState bindState = BindState.UNBOUND;
+    private volatile BindState bindState = BindState.UNBOUND;
+    protected BindState getBindState() {
+        return bindState;
+    }
 
     /**
      * Keepalive timeout, if not set the soTimeout is used.
diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java b/java/org/apache/tomcat/util/net/NioEndpoint.java
index 2661671..998647c 100644
--- a/java/org/apache/tomcat/util/net/NioEndpoint.java
+++ b/java/org/apache/tomcat/util/net/NioEndpoint.java
@@ -344,13 +344,16 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel>
 
     @Override
     protected void doCloseServerSocket() throws IOException {
-        if (!getUseInheritedChannel() && serverSock != null) {
-            // Close server socket
-            serverSock.close();
-        }
-        serverSock = null;
-        if (getUnixDomainSocketPath() != null && bindState != BindState.UNBOUND) {
-            Files.delete(Paths.get(getUnixDomainSocketPath()));
+        try {
+            if (!getUseInheritedChannel() && serverSock != null) {
+                // Close server socket
+                serverSock.close();
+            }
+            serverSock = null;
+        } finally {
+            if (getUnixDomainSocketPath() != null && getBindState().wasBound()) {
+                Files.delete(Paths.get(getUnixDomainSocketPath()));
+            }
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]