On Tue, 02 Dec 2008 10:42:21 -0500
"Dan Poirier" <[EMAIL PROTECTED]> wrote:

> What confuses me is that most of the rest of the code in ap_die() is
> concerned with constructing the response, which seems to assume that
> no response has been written before calling ap_die; yet the new code
> seems to allow for the possibility that a response has already been
> written before ap_die was called.

I'm confused by this, too.

Most instances of ap_die come from earlier in the cycle,
when a hooked function returns an HTTP error code.  When a
filter generates an error, this logic fails, so we had a
special case for AP_FILTER_ERROR.

There seems to be another manifestation of the same problem as
PR#31759 here, where ap_invoke_handler returns an apr_status from
a filter.  But that's now only possible with HTTP_IGNORE_RANGE,
as otherwise the status is converted to HTTP_INTERNAL_SERVER_ERROR.
So a single exception for AP_FILTER_ERROR is normally sufficient.
The change here deals with an edge-case.

r722213 fixes a possible edge-case within this special case.

I suspect we may still have edge-case bugs arising from
filters in subrequests.  I may try to look at whether the
"double-response" bug reports can be traced to ap_die
being called after a response has been started.  But for
the time being, I'm satisfied that this patch makes sense,
and I'm about to vote +1 on it.

Thanks for your contribution to the discussion.  I think I've
figured out more in trying to reply than I had before :-)

-- 
Nick Kew

Application Development with Apache - the Apache Modules Book
http://www.apachetutor.org/

Reply via email to