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