At 09:51 AM 10/21/2003, [EMAIL PROTECTED] 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
>