On 7/10/20 6:15 PM, Ruediger Pluem wrote:
> 
> 
> On 7/10/20 5:05 PM, Yann Ylavic wrote:
>> On Fri, Jul 10, 2020 at 12:25 PM Ruediger Pluem <[email protected]> wrote:
>>>
>>> I observed 36 which 0x24 or POLLHUP | POLLOUT for rtnevents and
>>> 52 which is 0x34 or POLLHUP | POLLOUT | POLLERR for rtnevents
>>
>> Thanks, so POLLHUP|POLLERR while POSIX says they are mutually exclusive..
>>
>> I'd rather fix it with the below though:
>>
>> Index: modules/proxy/proxy_util.c
>> ===================================================================
>> --- modules/proxy/proxy_util.c    (revision 1879448)
>> +++ modules/proxy/proxy_util.c    (working copy)
>> @@ -4527,9 +4527,11 @@ PROXY_DECLARE(int) ap_proxy_tunnel_run(proxy_tunne
>>                  }
>>              }
>>
>> -            if (pfd->rtnevents & (APR_POLLIN | APR_POLLHUP)
>> -                    || (tc->readable && tc->other->writable
>> -                        && ap_filter_input_pending(tc->c) == OK)) {
>> +            if (tc->readable
>> +                    && (pfd->rtnevents & (APR_POLLIN | APR_POLLHUP
>> +                                                     | APR_POLLERR)
>> +                        || (tc->other->writable
>> +                            && ap_filter_input_pending(tc->c) == OK))) {
>>                  struct proxy_tunnel_conn *in = tc, *out = tc->other;
>>                  int sent = 0;
>>
>> --
>>
>> The advantage over "pfd->rtnevents & pfd->reqevents & ..." is that it
>> still enter the read and call the input filters if there is
>> POLLERR/HUP (but not EOF already), for all the filters to be aware of
>> the failure at the network level.
> 
> This was the reason why I did not commit anything yet, because I had the 
> feeling that I don't understand everything completely :_)
> 
>>
>> Would that work for you?
> 
> Seems to work. Go ahead.

Will you commit?

Regards

RĂ¼diger

Reply via email to