On Fri, Jul 20, 2018 at 2:54 PM, Ruediger Pluem <rpl...@apache.org> wrote:
>
> On 07/20/2018 02:38 PM, Yann Ylavic wrote:
>> On Fri, Jul 20, 2018 at 12:08 PM, Ruediger Pluem <rpl...@apache.org> wrote:
>>>
>>> On 07/19/2018 12:36 AM, yla...@apache.org wrote:
>>>>
>>>> -    if (!c->data_in_input_filters || ap_run_input_pending(c) != OK) {
>>>> +    if (ap_run_input_pending(c) != OK) {
>>>
>>> We have a different code flow here now. If c->data_in_input_filters is 0, 
>>> then
>>> ap_filter_input_pending does iterate over the ring whereas it did not do 
>>> before,
>>> because it was not called.
>>
>> Right, though ap_filter_input_pending() iteration is quite cheap, and
>> could be even cheaper if pending input and output filters were handled
>> separetely (next step...).
>>
>> I prefer to keep the logic in ap_filter_*_pending() if you don't mind,
>> and avoid global c->data_in_*_filter checks all over the place
>> (possibly they'll disappear from conn_rec some day).
>> For now c->data_in_*_filter are used internally (core) to positively
>> force pending data, never negatively (and that's wise I think).
>
> So if c->data_in_input_filters is 0 the iteration is not expected to return 
> OK,
> as otherwise we would have an inconsistency between c->data_in_input_filters 
> and the ring, correct?

Well, it's hard/unwise to keep a per-connection flag aligned with a
per-filter feature, that's why those flags should disappear I think.
But yes, when ap_run_input_pending() is called from
ap_process_request() it will never return OK if
c->data_in_input_filters is 0.

The issue, I think, is rather that if c->data_in_*_filters is 1 it
will not change until the next call to ap_process_[async_]request(),
even though the filter chain may be emptied until then, so
ap_filter_*_pending() may return OK while it shouldn't.

Hmm, let me look at this more closely, it seems that these flags
should really disappear now.

> On the other hand this inconsistency is possible if ap_run_input_pending is 
> called from
> other locations in the code than the above where we did not have this 
> !c->data_in_input_filters check, correct?

This says the same thing as I said above right?

Regards,
Yann.

Reply via email to