From 6e8e10b4159f4a31e6aaa535e38dc035f8711787 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 24 Mar 2021 10:27:56 +0100 Subject: [PATCH] MINOR: fd: make fd_clr_running() return the remaining running mask We'll need to know that a thread is the last one to use an fd, so let's make fd_clr_running() return the remaining bits after removal. Note that in practice we're only interested in knowing if it's zero but the compiler doesn't make use of the clags after the AND and emits a CMPXCHG anyway :-/ This will need to be backported to 2.2 to fix an issue. --- include/haproxy/fd.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/include/haproxy/fd.h b/include/haproxy/fd.h index 20e4d754f..69eda485f 100644 --- a/include/haproxy/fd.h +++ b/include/haproxy/fd.h @@ -347,10 +347,12 @@ static inline void fd_set_running_excl(int fd) old_mask = 0; } - -static inline void fd_clr_running(int fd) +/* remove tid_bit from the fd's running mask and returns the bits that remain + * after the atomic operation. + */ +static inline long fd_clr_running(int fd) { - _HA_ATOMIC_AND(&fdtab[fd].running_mask, ~tid_bit); + return _HA_ATOMIC_AND(&fdtab[fd].running_mask, ~tid_bit); } /* Update events seen for FD and its state if needed. This should be