Author: markt Date: Tue Mar 19 14:26:49 2013 New Revision: 1458308 URL: http://svn.apache.org/r1458308 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54721 RemoteEndpoint blocks indefinitely if sendObject called with BinaryStream of TextStream encoders Patch provided by Nick Williams.
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java 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=1458308&r1=1458307&r2=1458308&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java Tue Mar 19 14:26:49 2013 @@ -426,14 +426,18 @@ public abstract class WsRemoteEndpointIm String msg = ((Encoder.Text) encoder).encode(obj); sendStringByCompletion(msg, completion); } else if (encoder instanceof Encoder.TextStream) { - Writer w = getSendWriter(); - ((Encoder.TextStream) encoder).encode(obj, w); + try (Writer w = getSendWriter()) { + ((Encoder.TextStream) encoder).encode(obj, w); + } + completion.onResult(new SendResult()); } else if (encoder instanceof Encoder.Binary) { ByteBuffer msg = ((Encoder.Binary) encoder).encode(obj); sendBytesByCompletion(msg, completion); } else if (encoder instanceof Encoder.BinaryStream) { - OutputStream os = getSendStream(); - ((Encoder.BinaryStream) encoder).encode(obj, os); + try (OutputStream os = getSendStream()) { + ((Encoder.BinaryStream) encoder).encode(obj, os); + } + completion.onResult(new SendResult()); } else { throw new EncodeException(obj, sm.getString( "wsRemoteEndpoint.noEncoder", obj.getClass())); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org