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

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


The following commit(s) were added to refs/heads/main by this push:
     new 9f53a40a30 Further BZ 66508 fix
9f53a40a30 is described below

commit 9f53a40a308fb8c07cb875a605ab92ab5701a4a2
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Apr 12 13:25:00 2023 +0100

    Further BZ 66508 fix
    
    Don't close connection before close message has been sent to client.
---
 java/org/apache/tomcat/websocket/WsSession.java               |  5 +++++
 .../apache/tomcat/websocket/server/WsHttpUpgradeHandler.java  | 11 ++++++++---
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/java/org/apache/tomcat/websocket/WsSession.java 
b/java/org/apache/tomcat/websocket/WsSession.java
index 5f947afde7..45703457f5 100644
--- a/java/org/apache/tomcat/websocket/WsSession.java
+++ b/java/org/apache/tomcat/websocket/WsSession.java
@@ -462,6 +462,11 @@ public class WsSession implements Session {
     }
 
 
+    public boolean isClosed() {
+       return state == State.CLOSED;
+    }
+
+
     @Override
     public long getMaxIdleTimeout() {
         checkState();
diff --git a/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java 
b/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
index 7f37101e71..93a717f988 100644
--- a/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
+++ b/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
@@ -186,10 +186,15 @@ public class WsHttpUpgradeHandler implements 
InternalHttpUpgradeHandler {
                 return SocketState.CLOSED;
 
         }
-        if (wsFrame.isOpen()) {
-            return SocketState.UPGRADED;
-        } else {
+
+        /*
+         * If a CLOSE frame has been received then wsFrame will be closed but 
need to keep the connection open until the
+         * CLOSE frame has been sent. Hence use the wsSession.isClosed() 
rather than wsFrame.isOpen() here.
+         */
+        if (wsSession.isClosed()) {
             return SocketState.CLOSED;
+        } else {
+            return SocketState.UPGRADED;
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to