httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "William A. Rowe, Jr." <wr...@rowe-clan.net>
Subject Re: ap_invoke_handler
Date Tue, 21 Oct 2003 17:16:09 GMT
At 09:51 AM 10/21/2003, gregames@apache.org wrote:
>William A. Rowe, Jr. wrote:
>>At 03:17 PM 10/20/2003, Aryeh Katz wrote:
>>
>>>I have an input filter that might need to reinvoke the handler that inserted this
input filter (this time with the filter removed).
>
>> Do not attempt to remove a filter once it's inserted, simple force it to be inert.
 
>
>hmmm?

Ahhh.  Now look at the code below.  WHO removes the byterange filter?

Answer, the byterange filter removes itself.  It *knows* there are no partially
processed buckets that it is holding on to.  Nobody else is allowed to add
or remove a filter - but the filter may remove itself when it knows this is
a safe operation.

Be careful here, by the way.  We have to be certain that f itself isn't
modified, such that the next reference of f->next isn't corrupted.  That
won't occur in 2.0.x.  Hopefully 2.1-dev retains that behavior, but for
safetys sake, this code would be better if you dereferenced f->next
and saved it, then called remove, the passed the saved reference.

Somewhat pedantic but it seems cleaner to me.

Bill

>modules/http/http_protocol.c:: ap_byterange_filter()
>
>        /* We have nothing to do, get out of the way. */
>        if (num_ranges == 0) {
>            ap_remove_output_filter(f);
>            return ap_pass_brigade(f->next, bb);
>        }
>
>Greg
>



Mime
View raw message