From: Jim Jagielski Date: Sat, 20 Jun 2020 14:21:19 +0000 (+0000) Subject: Merge r1877783 from trunk: X-Git-Tag: 2.4.44~81 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=14d3b1279b18f1089d5e20339d2e1cf9252724f6;p=thirdparty%2Fapache%2Fhttpd.git Merge r1877783 from trunk: *) mod_http2: Fixed regression that caused connections to close when mod_reqtimeout was configured with a handshake timeout. Fixes gitub issue #196. Submitted by: icing Reviewed by: icing, steffenal, rpluem git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1879035 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index ce2ce4d98c2..cdd30ecce57 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,10 @@ Changes with Apache 2.4.44 *) mod_ssl: Fix memory leak in stapling code. PR63687. [Stefan Eissing] + *) 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_http2: the "ping" proxy parameter· (see ) is now used when checking the liveliness of a new or reused h2 connection to the diff --git a/STATUS b/STATUS index 375b7141d54..fa39941ec69 100644 --- a/STATUS +++ b/STATUS @@ -142,14 +142,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK: 2.4.x patch: svn merge -c 1876616 ^/httpd/httpd/trunk . +1: steffenal, rpluem, gbechis, jim - *) mod_http2: Fixed a regression that caused connections to close early - when mod_reqtimeout was configured with a handshake timeout. Fixes - . [Stefan Eissing] - trunk patch: - - http://svn.apache.org/r1877783 - 2.4.x patch: svn merge -c 1877783 ^/httpd/httpd/trunk . - +1: icing, steffenal, rpluem - PATCHES PROPOSED TO BACKPORT FROM TRUNK: [ New proposals should be added at the end of the list ] diff --git a/modules/http2/h2_conn.c b/modules/http2/h2_conn.c index 86ab6cb7837..5b1863bda52 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 de54ac7044a..a2a71ca6220 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 07a30cc6901..9ec658b8e17 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. */