summaryrefslogtreecommitdiffstats
path: root/modules/http2
diff options
context:
space:
mode:
authorStefan Eissing <icing@apache.org>2023-06-28 10:54:46 +0200
committerStefan Eissing <icing@apache.org>2023-06-28 10:54:46 +0200
commit71269d0515d477100e368873ffa8e2606e222169 (patch)
tree257c019975a5d3860d20ce942dd5c1f7ff9e0529 /modules/http2
parentPR66672: rewrite QSA+trailing ? regression (diff)
downloadapache2-71269d0515d477100e368873ffa8e2606e222169.tar.xz
apache2-71269d0515d477100e368873ffa8e2606e222169.zip
mod_http2: optimization for c1 output passing when collecting
next DATA frame for a response. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1910648 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'modules/http2')
-rw-r--r--modules/http2/h2_stream.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/modules/http2/h2_stream.c b/modules/http2/h2_stream.c
index 19527600e0..282b06e975 100644
--- a/modules/http2/h2_stream.c
+++ b/modules/http2/h2_stream.c
@@ -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