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.

Would that work for you?


Regards;
Yann.

Reply via email to