You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2020/07/14 20:32:37 UTC

[tomcat] branch master updated: Ensure WebSocket connection write lock is released on exception

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

markt 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 d8aae3a  Ensure WebSocket connection write lock is released on exception
d8aae3a is described below

commit d8aae3ac3ae991d5d4e7bd052b9ddfd7ab335255
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Tue Jul 14 21:29:31 2020 +0100

    Ensure WebSocket connection write lock is released on exception
---
 .../org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java | 11 ++++++++++-
 webapps/docs/changelog.xml                                    |  4 ++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java b/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
index 08f3bf3..ba542a4 100644
--- a/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
+++ b/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
@@ -45,6 +45,7 @@ import jakarta.websocket.SendResult;
 
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
+import org.apache.tomcat.util.ExceptionUtils;
 import org.apache.tomcat.util.buf.Utf8Encoder;
 import org.apache.tomcat.util.res.StringManager;
 
@@ -306,7 +307,15 @@ public abstract class WsRemoteEndpointImplBase implements RemoteEndpoint {
         }
 
         for (MessagePart mp : messageParts) {
-            writeMessagePart(mp);
+            try {
+                writeMessagePart(mp);
+            } catch (Throwable t) {
+                ExceptionUtils.handleThrowable(t);
+                messagePartInProgress.release();
+                wsSession.doClose(new CloseReason(CloseCodes.GOING_AWAY, t.getMessage()),
+                        new CloseReason(CloseCodes.CLOSED_ABNORMALLY, t.getMessage()));
+                throw t;
+            }
             if (!bsh.getSendResult().isOK()) {
                 messagePartInProgress.release();
                 Throwable t = bsh.getSendResult().getException();
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 42783b5..3d78b27 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -80,6 +80,10 @@
         <code>https</code>. Ensure that such requests are not rejected. PR
         provided by Ronny Perinke. (markt)
       </fix>
+      <fix>
+        Fix a potential issue where the write lock for a WebSocket connection
+        may not be released if an exception occurs during the write. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Web applications">


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