mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-29 06:40:59 +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)) {
|
if (unlikely(cfd == -1)) {
|
||||||
switch (errno) {
|
switch (errno) {
|
||||||
case EAGAIN:
|
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
|
/* the listening socket might have been disabled in a shared
|
||||||
* process and we're a collateral victim. We'll just pause for
|
* 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
|
* a while in case it comes back. In the mean time, we need to
|
||||||
* clear this sticky flag.
|
* 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;
|
goto transient_error;
|
||||||
}
|
}
|
||||||
fd_cant_recv(fd);
|
fd_cant_recv(fd);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user