From: Willy Tarreau Date: Thu, 29 Jul 2021 14:19:24 +0000 (+0200) Subject: MINOR: poll/epoll: move detection of RDHUP support earlier X-Git-Tag: v2.5-dev3~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=53a16187fd3dcfe9a41ccc218469c8b3ea1040e0;p=thirdparty%2Fhaproxy.git MINOR: poll/epoll: move detection of RDHUP support earlier Let's move the detection of support for RDHUP earlier and out of the FD update chain, as it complicates its simplification. --- diff --git a/src/ev_epoll.c b/src/ev_epoll.c index 330c38c449..8810b77857 100644 --- a/src/ev_epoll.c +++ b/src/ev_epoll.c @@ -222,6 +222,9 @@ static void _do_poll(struct poller *p, int exp, int wake) e = epoll_events[count].events; fd = epoll_events[count].data.fd; + if ((e & EPOLLRDHUP) && !(cur_poller.flags & HAP_POLL_F_RDHUP)) + _HA_ATOMIC_OR(&cur_poller.flags, HAP_POLL_F_RDHUP); + #ifdef DEBUG_FD _HA_ATOMIC_INC(&fdtab[fd].event_count); #endif @@ -245,9 +248,6 @@ static void _do_poll(struct poller *p, int exp, int wake) ((e & EPOLLHUP) ? FD_EV_SHUT_RW : 0) | ((e & EPOLLERR) ? FD_EV_ERR_RW : 0); - if ((e & EPOLLRDHUP) && !(cur_poller.flags & HAP_POLL_F_RDHUP)) - _HA_ATOMIC_OR(&cur_poller.flags, HAP_POLL_F_RDHUP); - fd_update_events(fd, n); } /* the caller will take care of cached events */ diff --git a/src/ev_poll.c b/src/ev_poll.c index c30aadbe1a..6bd0cf4731 100644 --- a/src/ev_poll.c +++ b/src/ev_poll.c @@ -218,6 +218,9 @@ static void _do_poll(struct poller *p, int exp, int wake) int e = poll_events[count].revents; fd = poll_events[count].fd; + if ((e & POLLRDHUP) && !(cur_poller.flags & HAP_POLL_F_RDHUP)) + _HA_ATOMIC_OR(&cur_poller.flags, HAP_POLL_F_RDHUP); + #ifdef DEBUG_FD _HA_ATOMIC_INC(&fdtab[fd].event_count); #endif @@ -245,9 +248,6 @@ static void _do_poll(struct poller *p, int exp, int wake) ((e & POLLHUP) ? FD_EV_SHUT_RW : 0) | ((e & POLLERR) ? FD_EV_ERR_RW : 0); - if ((e & POLLRDHUP) && !(cur_poller.flags & HAP_POLL_F_RDHUP)) - _HA_ATOMIC_OR(&cur_poller.flags, HAP_POLL_F_RDHUP); - fd_update_events(fd, n); }