]> granicus.if.org Git - apache/commitdiff
On the trunk:
authorStefan Eissing <icing@apache.org>
Wed, 11 Apr 2018 08:30:25 +0000 (08:30 +0000)
committerStefan Eissing <icing@apache.org>
Wed, 11 Apr 2018 08:30:25 +0000 (08:30 +0000)
mod_http2: always wake up any conditional waits when streams are aborted. Fixes race conditions where timeouts would trigger instead.

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

modules/http2/h2_bucket_beam.c

index 6b6750d1fa17eab440a58175b697f894b03d283b..7653ec1092e537ec3616333f79370e47e5000f19 100644 (file)
@@ -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);
     }