The main loop in the core output filter (rewritten since 2.2) will try to read the entire passed-in brigade into RAM for CGI/PIPE-like mutating bucket types. :( :( We have trying to bash this kind of bug since 2.0.x days, and now the *core output filter* itself is doing it, yegads.
The fix may be as simple as adding an appropriate "break" to the loop, I'm not sure yet. It should be doing the non-block read, FLUSH & retry thing as well, so that streaming from slow generators works properly. prefork/mod_cgi, serve this as "nph-killme.pl" and wait for the fireworks: !/usr/bin/perl print "HTTP/1.0 200 OK\r\n"; print "Transfer-Encoding: chunked\r\n"; print "\r\n"; print "5\r\nhello\r\n" while (1);