Just a FYI: I announced that I had a rewrite of the connection/stream handling in the works and would bring that into trunk soon. An update on how that is going:
v2.0.0-rc4 is on github now and solves the problem with pipes on our beloved Window platform, thanks to user @nono303 for the testing. I have asked on twitter for some more volunteers on testing that, so maybe next week, when nothing more negative comes up, I will bring that into trunk. On a "real" OS, there will then be a apr_pollset for monitoring main connections and streams (secondary connections). And those will then have a file handle for input polling. This gives opportunities for certain proxy modules to use pollsets also, if we want to. Overall, this allowed the implementation to reduce complexity. The naming should now make an easier read. Where applicable "conn_rec *c" has been renamed to "c1" for a main connection and "c2" for a secondary one and filters/functions have been renamed to show which connection type they are intended for. Beams have been simplified and no longer use "proxy" buckets. MMAP buckets are transferred more efficiently. RĂ¼diger's "H2StreamTimeout" has been added and test cases gave some surprises. Turns out ap_die() behaves different depending on the presence of the H1 header filter in the out filter chain. Who knew? Performance is improved under load. I think its basically less CPU usage that raises the request/s ceiling by 5-10% on my macOS machine when serving static files. Cheers, Stefan