From: Yann Ylavic Date: Tue, 29 May 2018 21:09:31 +0000 (+0000) Subject: Merge r1828879 from trunk: X-Git-Tag: 2.4.34~156 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f86eed3937788d37503765f229d465f7022017b9;p=apache Merge r1828879 from trunk: On the trunk: mod_http2: always wake up any conditional waits when streams are aborted. Fixes race conditions where timeouts would trigger instead. Submitted by: icing Reviewed by: icing, jim, ylavic git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1832487 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 9468c3ded7..e63f78f40f 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache 2.4.34 + *) mod_http2: Fix unnecessary timeout waits in case streams are aborted. + [Stefan Eissing] + *) mod_proxy: Do not restrict the maximum pool size for backend connections any longer by the maximum number of threads per process and use a better default if mod_http2 is loaded. diff --git a/modules/http2/h2_bucket_beam.c b/modules/http2/h2_bucket_beam.c index 6b6750d1fa..7653ec1092 100644 --- a/modules/http2/h2_bucket_beam.c +++ b/modules/http2/h2_bucket_beam.c @@ -550,6 +550,7 @@ static void recv_buffer_cleanup(h2_bucket_beam *beam, h2_beam_lock *bl) apr_brigade_destroy(bb); if (bl) enter_yellow(beam, bl); + apr_thread_cond_broadcast(beam->change); if (beam->cons_ev_cb) { beam->cons_ev_cb(beam->cons_ctx, beam); } @@ -707,12 +708,10 @@ void h2_beam_abort(h2_bucket_beam *beam) h2_beam_lock bl; if (beam && enter_yellow(beam, &bl) == APR_SUCCESS) { - if (!beam->aborted) { - beam->aborted = 1; - r_purge_sent(beam); - h2_blist_cleanup(&beam->send_list); - report_consumption(beam, &bl); - } + beam->aborted = 1; + r_purge_sent(beam); + h2_blist_cleanup(&beam->send_list); + report_consumption(beam, &bl); apr_thread_cond_broadcast(beam->change); leave_yellow(beam, &bl); }