diff --git a/src/ev_epoll.c b/src/ev_epoll.c index 330c38c44..8810b7785 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 c30aadbe1..6bd0cf473 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); }