This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new ec18c92086 Fix 66530 - Regression in fix for BZ 66442. Ensure count is 
decremented
ec18c92086 is described below

commit ec18c92086258ac22889e88a6d1b3b04b49b8ce1
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Fri Mar 17 09:23:05 2023 +0000

    Fix 66530 - Regression in fix for BZ 66442. Ensure count is decremented
    
    https://bz.apache.org/bugzilla/show_bug.cgi?id=66530
---
 .../apache/coyote/http2/Http2AsyncUpgradeHandler.java   | 17 ++++-------------
 java/org/apache/coyote/http2/Http2UpgradeHandler.java   | 15 ++++++++++-----
 webapps/docs/changelog.xml                              |  7 +++++++
 3 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java 
b/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
index 2a5efb9284..fdca5b6275 100644
--- a/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
+++ b/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
@@ -202,7 +202,7 @@ public class Http2AsyncUpgradeHandler extends 
Http2UpgradeHandler {
             }
         }
         if (endOfStream) {
-            stream.sentEndOfStream();
+            sentEndOfStream(stream);
         }
     }
 
@@ -226,10 +226,7 @@ public class Http2AsyncUpgradeHandler extends 
Http2UpgradeHandler {
         header[3] = FrameType.DATA.getIdByte();
         if (finished) {
             header[4] = FLAG_END_OF_STREAM;
-            stream.sentEndOfStream();
-            if (!stream.isActive()) {
-                
setConnectionTimeoutForStreamCount(activeRemoteStreamCount.decrementAndGet());
-            }
+            sentEndOfStream(stream);
         }
         if (writable) {
             ByteUtil.set31Bits(header, 5, stream.getIdAsInt());
@@ -349,10 +346,7 @@ public class Http2AsyncUpgradeHandler extends 
Http2UpgradeHandler {
             header[3] = FrameType.DATA.getIdByte();
             if (finished) {
                 header[4] = FLAG_END_OF_STREAM;
-                sendfile.stream.sentEndOfStream();
-                if (!sendfile.stream.isActive()) {
-                    
setConnectionTimeoutForStreamCount(activeRemoteStreamCount.decrementAndGet());
-                }
+                sentEndOfStream(sendfile.stream);
             }
             if (writable) {
                 if (log.isDebugEnabled()) {
@@ -433,10 +427,7 @@ public class Http2AsyncUpgradeHandler extends 
Http2UpgradeHandler {
                 header[3] = FrameType.DATA.getIdByte();
                 if (finished) {
                     header[4] = FLAG_END_OF_STREAM;
-                    sendfile.stream.sentEndOfStream();
-                    if (!sendfile.stream.isActive()) {
-                        
setConnectionTimeoutForStreamCount(activeRemoteStreamCount.decrementAndGet());
-                    }
+                    sentEndOfStream(sendfile.stream);
                 }
                 if (writable) {
                     if (log.isDebugEnabled()) {
diff --git a/java/org/apache/coyote/http2/Http2UpgradeHandler.java 
b/java/org/apache/coyote/http2/Http2UpgradeHandler.java
index de1068b995..1a99048395 100644
--- a/java/org/apache/coyote/http2/Http2UpgradeHandler.java
+++ b/java/org/apache/coyote/http2/Http2UpgradeHandler.java
@@ -693,7 +693,7 @@ class Http2UpgradeHandler extends AbstractStream implements 
InternalHttpUpgradeH
         }
         stream.sentHeaders();
         if (endOfStream) {
-            stream.sentEndOfStream();
+            sentEndOfStream(stream);
         }
     }
 
@@ -798,10 +798,7 @@ class Http2UpgradeHandler extends AbstractStream 
implements InternalHttpUpgradeH
         header[3] = FrameType.DATA.getIdByte();
         if (finished) {
             header[4] = FLAG_END_OF_STREAM;
-            stream.sentEndOfStream();
-            if (!stream.isActive()) {
-                
setConnectionTimeoutForStreamCount(activeRemoteStreamCount.decrementAndGet());
-            }
+            sentEndOfStream(stream);
         }
         if (writable) {
             ByteUtil.set31Bits(header, 5, stream.getIdAsInt());
@@ -821,6 +818,14 @@ class Http2UpgradeHandler extends AbstractStream 
implements InternalHttpUpgradeH
     }
 
 
+    protected void sentEndOfStream(Stream stream) {
+        stream.sentEndOfStream();
+        if (!stream.isActive()) {
+            
setConnectionTimeoutForStreamCount(activeRemoteStreamCount.decrementAndGet());
+        }
+    }
+
+
     /*
      * Handles an I/O error on the socket underlying the HTTP/2 connection 
when it is triggered by application code
      * (usually reading the request or writing the response). Such I/O errors 
are fatal so the connection is closed. The
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 4d86d13214..f81ec47f17 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -160,6 +160,13 @@
         <bug>66512</bug>: Align AJP handling of invalid HTTP response headers
         (they are now removed from the response) with HTTP. (markt)
       </fix>
+      <fix>
+        <bug>66530</bug>: Correct a regression in the fix for bug
+        <bug>66442</bug> that meant that streams without a response body did 
not
+        decrement the active stream count when completing leading to
+        <code>ERR_HTTP2_SERVER_REFUSED_STREAM</code> for some connections.
+        (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="WebSocket">


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to