Author: markt
Date: Fri Mar 18 11:22:30 2016
New Revision: 1735577

URL: http://svn.apache.org/viewvc?rev=1735577&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=59189
Explicitly release the native memory held by the Inflater and Deflater when 
using PerMessageDeflate and the WebSocket session ends.
Based on a patch by Henrik Olsson.

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java
    tomcat/trunk/java/org/apache/tomcat/websocket/Transformation.java
    tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java
    tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java?rev=1735577&r1=1735576&r2=1735577&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java Fri 
Mar 18 11:22:30 2016
@@ -460,4 +460,13 @@ public class PerMessageDeflate implement
         }
         return result;
     }
+
+
+    @Override
+    public void close() {
+        // There will always be a next transformation
+        next.close();
+        inflater.end();
+        deflater.end();
+    }
 }

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/Transformation.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/Transformation.java?rev=1735577&r1=1735576&r2=1735577&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/Transformation.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/Transformation.java Fri Mar 
18 11:22:30 2016
@@ -103,4 +103,9 @@ public interface Transformation {
      *          may be bigger or smaller than the size of the input list
      */
     List<MessagePart> sendMessagePart(List<MessagePart> messageParts);
+
+    /**
+     * Clean-up any resources that were used by the transformation.
+     */
+    void close();
 }

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java?rev=1735577&r1=1735576&r2=1735577&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java Fri Mar 18 
11:22:30 2016
@@ -737,6 +737,11 @@ public abstract class WsFrameBase {
         public boolean validateRsv(int rsv, byte opCode) {
             return rsv == 0;
         }
+
+        @Override
+        public void close() {
+            // NO-OP for the terminal transformations
+        }
     }
 
 

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java?rev=1735577&r1=1735576&r2=1735577&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java 
Fri Mar 18 11:22:30 2016
@@ -704,6 +704,9 @@ public abstract class WsRemoteEndpointIm
         for (EncoderEntry entry : encoderEntries) {
             entry.getEncoder().destroy();
         }
+        // The transformation handles both input and output. It only needs to 
be
+        // closed once so it is closed here on the output side.
+        transformation.close();
         doClose();
     }
 

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1735577&r1=1735576&r2=1735577&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Fri Mar 18 11:22:30 2016
@@ -65,6 +65,16 @@
       </fix>
     </changelog>
   </subsection>
+  <subsection name="WebSocket">
+    <changelog>
+      <fix>
+        <bug>59189</bug>: Explicitly release the native memory held by the
+        <code>Inflater</code> and <code>Deflater</code> when using
+        PerMessageDeflate and the WebSocket session ends. Based on a patch by
+        Henrik Olsson. (markt)
+      </fix>
+    </changelog>
+  </subsection>
 </section>
 <section name="Tomcat 9.0.0.M4" rtext="2016-03-16">
   <subsection name="Catalina">



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

Reply via email to