mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-28 22:31:06 +01:00
BUG/MINOR: listener: also clear the error flag on a paused listener
When accept() fails because a listener is temporarily paused, the FD might have both FD_POLL_HUP and FD_POLL_ERR bits set. While we do not exploit FD_POLL_ERR here it's better to clear it because it is reported on "show fd" and is confusing. This may be backported to all versions.
This commit is contained in:
parent
7cdeb61701
commit
20aeb1c7cd
@ -793,13 +793,13 @@ void listener_accept(int fd)
|
||||
if (unlikely(cfd == -1)) {
|
||||
switch (errno) {
|
||||
case EAGAIN:
|
||||
if (fdtab[fd].ev & FD_POLL_HUP) {
|
||||
if (fdtab[fd].ev & (FD_POLL_HUP|FD_POLL_ERR)) {
|
||||
/* the listening socket might have been disabled in a shared
|
||||
* process and we're a collateral victim. We'll just pause for
|
||||
* a while in case it comes back. In the mean time, we need to
|
||||
* clear this sticky flag.
|
||||
*/
|
||||
_HA_ATOMIC_AND(&fdtab[fd].ev, ~FD_POLL_HUP);
|
||||
_HA_ATOMIC_AND(&fdtab[fd].ev, ~(FD_POLL_HUP|FD_POLL_ERR));
|
||||
goto transient_error;
|
||||
}
|
||||
fd_cant_recv(fd);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user