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.
Would that work for you?
Regards;
Yann.