Eh, not really into mod_bucketeer and its use cases, but some observations 
after a quick scan:

line 99:
            rv = ap_pass_brigade(f->next, ctx->bb);
            apr_brigade_cleanup(ctx->bb);

line 146:
                        rv = ap_pass_brigade(f->next, ctx->bb);
                        if (rv) {
                            return rv;
                        }
                        apr_brigade_cleanup(ctx->bb);
 
such things only work if an EOS always comes *before* an EOR bucket (case 1)
or of no DATA bucket of any kind follows an EOR.

I think, the code should check for EOR specifically and then get also out
of the way *without* a brigade cleanup afterwards.

As to EOR buckets and HTTP/2, the EOR buckets do not get forwarded to the main
connection. Instead there are H2EOS buckets as indicators that all stream data
has been sent. Destruction of those triggers the shutdown and dealloc of 
streams.

This can happen
a) after the request processing has finished and there is an EOR bucket on hold.
b) before the request is done and the EOR has yet to arrive (or the slave 
connection
   used in the request processing is aborted).
c) On a stream answered without ever generating a request_rec

As to crashes in http2: since 1.10.1 there are no crashes in HTTP/2 known to 
me. Stefan Priebe discovered deadlocks which I fixed in 1.10.2 and 1.10.3, but 
no more crashes. There is a reported assertion failure in mod_proxy_http2, but 
that's it.

Cheers,

Stefan

> Am 26.04.2017 um 01:04 schrieb Jacob Champion <[email protected]>:
> 
> On 04/25/2017 04:02 PM, Yann Ylavic wrote:
>> Let me remind this a bit, it's been a long time :)
>> Will have a look at it tomorrow hopefully..
> 
> No problem; sorry for springing it on you again after two months of silence. 
> :D
> 
> --Jacob

Reply via email to