On 7/10/20 5:05 PM, Yann Ylavic wrote:
> On Fri, Jul 10, 2020 at 12:25 PM Ruediger Pluem <rpl...@apache.org> 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.

Regards

RĂ¼diger

Reply via email to