There was a leftover of the single-threaded era when removing the
FD_POLL_HUP flag from the listeners. By not using an atomic operation
to clear the flag, another thread acting on the same listener might
have lost some events, though this would have resulted in that thread
to reprocess them immediately on the next loop pass.
This should be backported as far as 1.8.
(cherry picked from commit
7cdeb61701729ef7b4d2ed97e590860478ad718d)
Signed-off-by: Willy Tarreau <w@1wt.eu>
* a while in case it comes back. In the mean time, we need to
* clear this sticky flag.
*/
- fdtab[fd].ev &= ~FD_POLL_HUP;
+ _HA_ATOMIC_AND(&fdtab[fd].ev, ~FD_POLL_HUP);
goto transient_error;
}
fd_cant_recv(fd);