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