From: Willy Tarreau Date: Tue, 10 Dec 2019 07:37:04 +0000 (+0100) Subject: BUG/MINOR: listener/threads: always use atomic ops to clear the FD events X-Git-Tag: v2.2-dev1~203 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7cdeb61701729ef7b4d2ed97e590860478ad718d;p=thirdparty%2Fhaproxy.git BUG/MINOR: listener/threads: always use atomic ops to clear the FD events 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. --- diff --git a/src/listener.c b/src/listener.c index d68a1c3335..fdb91ea38e 100644 --- a/src/listener.c +++ b/src/listener.c @@ -799,7 +799,7 @@ void listener_accept(int fd) * 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);