From: Olivier Houchard Date: Wed, 17 Jun 2020 18:34:05 +0000 (+0200) Subject: BUG/MEDIUM: fd: Call fd_stop_recv() when we just got a fd. X-Git-Tag: v2.2-dev10~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ddc874c46c585cf2962468788c78c57ddcd89c6f;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: fd: Call fd_stop_recv() when we just got a fd. In fd_takeover(), when a double-width compare-and-swap is implemented, make sure, if we managed to get the fd, to call fd_stop_recv() on it, so that the thread that used to own it will know it has to stop polling it. --- diff --git a/src/fd.c b/src/fd.c index 1fcf1d43c7..51740c39ab 100644 --- a/src/fd.c +++ b/src/fd.c @@ -389,6 +389,12 @@ end: } while (!(_HA_ATOMIC_DWCAS(&fdtab[fd].running_mask, &old_masks, &new_masks))); _HA_ATOMIC_AND(&fdtab[fd].running_mask, ~tid_bit); + /* Make sure the FD doesn't have the active bit. It is possible that + * the fd is polled by the thread that used to own it, the new thread + * is supposed to call subscribe() later, to activate polling. + */ + fd_stop_recv(fd); + return 0; #endif /* HW_HAVE_CAS_DW */ }