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

Reply via email to