]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
mod_http2: optimization for c1 output passing when collecting
authorStefan Eissing <icing@apache.org>
Wed, 28 Jun 2023 08:54:46 +0000 (08:54 +0000)
committerStefan Eissing <icing@apache.org>
Wed, 28 Jun 2023 08:54:46 +0000 (08:54 +0000)
           next DATA frame for a response.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1910648 13f79535-47bb-0310-9956-ffa450edef68

modules/http2/h2_stream.c

index 19527600e0817774095f034ab6edd26ff1e94588..282b06e975fd972d7b88a8f4cf98ef504376d2c7 100644 (file)
@@ -1429,10 +1429,17 @@ static ssize_t stream_data_cb(nghttp2_session *ng2s,
         return NGHTTP2_ERR_DEFERRED;
     }
     if (h2_c1_io_needs_flush(&session->io)) {
-        ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c1,
-                      H2_SSSN_STRM_MSG(session, stream_id, "suspending on c1 out needs flush"));
-        h2_stream_dispatch(stream, H2_SEV_OUT_C1_BLOCK);
-        return NGHTTP2_ERR_DEFERRED;
+        rv = h2_c1_io_pass(&session->io);
+        if (APR_STATUS_IS_EAGAIN(rv)) {
+            ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c1,
+                          H2_SSSN_STRM_MSG(session, stream_id, "suspending on c1 out needs flush"));
+            h2_stream_dispatch(stream, H2_SEV_OUT_C1_BLOCK);
+            return NGHTTP2_ERR_DEFERRED;
+        }
+        else if (rv) {
+            h2_session_dispatch_event(session, H2_SESSION_EV_CONN_ERROR, rv, NULL);
+            return NGHTTP2_ERR_CALLBACK_FAILURE;
+        }
     }
 
     /* determine how much we'd like to send. We cannot send more than