summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Eissing <icing@apache.org>2020-05-15 13:59:32 +0200
committerStefan Eissing <icing@apache.org>2020-05-15 13:59:32 +0200
commit00977256ef92e5a1d29b9c9264d849ddd578d0a0 (patch)
tree0ef54bd39a49289679d7ca85a4380ab0e621f291
parentInclude Angle-bracket form to Quoted form (diff)
downloadapache2-00977256ef92e5a1d29b9c9264d849ddd578d0a0.tar.xz
apache2-00977256ef92e5a1d29b9c9264d849ddd578d0a0.zip
*) mod_http2: Fixed regression that caused connections to close when mod_reqtimeout
was configured with a handshake timeout. Fixes gitub issue #196. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1877783 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--CHANGES4
-rw-r--r--modules/http2/h2_conn.c6
-rw-r--r--modules/http2/h2_session.c2
-rw-r--r--modules/http2/h2_switch.c1
4 files changed, 11 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 9a940c3a3e..39900f0a4a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,10 @@
-*- coding: utf-8 -*-
Changes with Apache 2.5.1
+ *) mod_http2: Fixed regression that caused connections to close when mod_reqtimeout
+ was configured with a handshake timeout. Fixes gitub issue #196.
+ [Stefan Eissing]
+
*) mod_proxy_http: handle Upgrade request, 101 (Switching Protocol) response
and switched protocol forwarding. [Yann Ylavic]
diff --git a/modules/http2/h2_conn.c b/modules/http2/h2_conn.c
index 5be285390d..39b94b5935 100644
--- a/modules/http2/h2_conn.c
+++ b/modules/http2/h2_conn.c
@@ -187,6 +187,12 @@ apr_status_t h2_conn_setup(conn_rec *c, request_rec *r, server_rec *s)
if (APR_SUCCESS == (status = h2_session_create(&session, c, r, s, workers))) {
ctx = h2_ctx_get(c, 1);
h2_ctx_session_set(ctx, session);
+
+ /* remove the input filter of mod_reqtimeout, now that the connection
+ * is established and we have swtiched to h2. reqtimeout has supervised
+ * possibly configured handshake timeouts and needs to get out of the way
+ * now since the rest of its state handling assumes http/1.x to take place. */
+ ap_remove_input_filter_byhandle(c->input_filters, "reqtimeout");
}
return status;
diff --git a/modules/http2/h2_session.c b/modules/http2/h2_session.c
index f7538316e1..4e48762c5b 100644
--- a/modules/http2/h2_session.c
+++ b/modules/http2/h2_session.c
@@ -1179,7 +1179,7 @@ struct h2_stream *h2_session_push(h2_session *session, h2_stream *is,
stream = h2_session_open_stream(session, nid, is->id);
if (!stream) {
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c,
- H2_STRM_LOG(APLOGNO(03077), stream,
+ H2_STRM_LOG(APLOGNO(03077), is,
"failed to create stream obj %d"), nid);
/* kill the push_promise */
nghttp2_submit_rst_stream(session->ngh2, NGHTTP2_FLAG_NONE, nid,
diff --git a/modules/http2/h2_switch.c b/modules/http2/h2_switch.c
index 07a30cc690..9ec658b8e1 100644
--- a/modules/http2/h2_switch.c
+++ b/modules/http2/h2_switch.c
@@ -159,7 +159,6 @@ static int h2_protocol_switch(conn_rec *c, request_rec *r, server_rec *s,
* right away.
*/
ap_remove_input_filter_byhandle(r->input_filters, "http_in");
- ap_remove_input_filter_byhandle(r->input_filters, "reqtimeout");
ap_remove_output_filter_byhandle(r->output_filters, "HTTP_HEADER");
/* Ok, start an h2_conn on this one. */