Author: markt Date: Fri Mar 18 11:27:35 2016 New Revision: 1735579 URL: http://svn.apache.org/viewvc?rev=1735579&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/tc8.5.x/trunk/ (props changed) tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/Transformation.java tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc8.5.x/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Mar 18 11:27:35 2016 @@ -1 +1 @@ -/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044,1735480 +/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044,1735480,1735577 Modified: tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java?rev=1735579&r1=1735578&r2=1735579&view=diff ============================================================================== --- tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java (original) +++ tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java Fri Mar 18 11:27:35 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/tc8.5.x/trunk/java/org/apache/tomcat/websocket/Transformation.java URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/Transformation.java?rev=1735579&r1=1735578&r2=1735579&view=diff ============================================================================== --- tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/Transformation.java (original) +++ tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/Transformation.java Fri Mar 18 11:27:35 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/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java?rev=1735579&r1=1735578&r2=1735579&view=diff ============================================================================== --- tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java (original) +++ tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java Fri Mar 18 11:27:35 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/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java?rev=1735579&r1=1735578&r2=1735579&view=diff ============================================================================== --- tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java (original) +++ tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java Fri Mar 18 11:27:35 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/tc8.5.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml?rev=1735579&r1=1735578&r2=1735579&view=diff ============================================================================== --- tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml Fri Mar 18 11:27:35 2016 @@ -44,7 +44,19 @@ They eventually become mixed with the numbered issues. (I.e., numbered issues do not "pop up" wrt. others). --> -<section name="Tomcat 8.5.0" rext="In development"> +<section name="Tomcat 8.5.1" rtext="In development"> + <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 8.5.0" rtext="Release in progress"> <subsection name="Other"> <changelog> <add> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org