The details I've seen are too sparse to say with certainty, but it seems like the issue is concurrent access to the same value through a pointer.
In particular it's `req` in the function with this signature:
static void assign_headers(request_rec *r, const h2_request *req,
int no_body, int is_connect)
The fix being: - apr_table_setn(req->headers, "Content-Length", "0");
+ apr_table_setn(r->headers_in, "Content-Length", "0");
My read on this is that `req` is meant to be a readonly value in this function, which is why it's marked `const`. And being readonly, it would be safe to access concurrently. However, someone accidentally wrote through this pointer.In Rust this would've been `req: &h2_request` and the accidental write wouldn't have been possible (barring interior mutability). Even with interior mutability there is no thread interleaving during the write, which happens through a `&mut h2_request` probably obtained through a lock.