Author: markt Date: Wed Apr 12 15:00:09 2017 New Revision: 1791129 URL: http://svn.apache.org/viewvc?rev=1791129&view=rev Log: Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=60970 Nio2 needs separate fix. Optimise Nio/Apr fix a little
Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java?rev=1791129&r1=1791128&r2=1791129&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java Wed Apr 12 15:00:09 2017 @@ -155,25 +155,29 @@ public class Http2AsyncUpgradeHandler ex ByteBuffer target = ByteBuffer.allocate(payloadSize); state = getHpackEncoder().encode(coyoteResponse.getMimeHeaders(), target); target.flip(); - ByteUtil.setThreeBytes(header, 0, target.limit()); - if (first) { - first = false; - header[3] = FrameType.HEADERS.getIdByte(); - if (stream.getOutputBuffer().hasNoBody()) { - header[4] = FLAG_END_OF_STREAM; + if (state == State.COMPLETE || target.limit() > 0) { + ByteUtil.setThreeBytes(header, 0, target.limit()); + if (first) { + first = false; + header[3] = FrameType.HEADERS.getIdByte(); + if (stream.getOutputBuffer().hasNoBody()) { + header[4] = FLAG_END_OF_STREAM; + } + } else { + header[3] = FrameType.CONTINUATION.getIdByte(); } - } else { - header[3] = FrameType.CONTINUATION.getIdByte(); - } - if (state == State.COMPLETE) { - header[4] += FLAG_END_OF_HEADERS; - } - if (log.isDebugEnabled()) { - log.debug(target.limit() + " bytes"); + if (state == State.COMPLETE) { + header[4] += FLAG_END_OF_HEADERS; + } + if (log.isDebugEnabled()) { + log.debug(target.limit() + " bytes"); + } + ByteUtil.set31Bits(header, 5, stream.getIdentifier().intValue()); + bufs.add(ByteBuffer.wrap(header)); + bufs.add(target); + } else if (state == State.UNDERFLOW) { + payloadSize = payloadSize * 2; } - ByteUtil.set31Bits(header, 5, stream.getIdentifier().intValue()); - bufs.add(ByteBuffer.wrap(header)); - bufs.add(target); } socketWrapper.write(BlockingMode.SEMI_BLOCK, getWriteTimeout(), TimeUnit.MILLISECONDS, null, SocketWrapperBase.COMPLETE_WRITE, applicationErrorCompletion, Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java?rev=1791129&r1=1791128&r2=1791129&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Wed Apr 12 15:00:09 2017 @@ -572,7 +572,7 @@ class Http2UpgradeHandler extends Abstra handleAppInitiatedIOException(ioe); } } - if (state == State.UNDERFLOW) { + if (state == State.UNDERFLOW && target.limit() == 0) { target = ByteBuffer.allocate(target.capacity() * 2); } else { target.clear(); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org