You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2017/04/12 15:00:09 UTC
svn commit: r1791129 - in /tomcat/trunk/java/org/apache/coyote/http2:
Http2AsyncUpgradeHandler.java Http2UpgradeHandler.java
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org