MINOR: fd: make fd_clr_running() return the remaining running mask
authorWilly Tarreau <w@1wt.eu>
Wed, 24 Mar 2021 09:27:56 +0000 (10:27 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 24 Mar 2021 16:19:03 +0000 (17:19 +0100)
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.

(cherry picked from commit 6e8e10b4159f4a31e6aaa535e38dc035f8711787)
Signed-off-by: Willy Tarreau <w@1wt.eu>

include/haproxy/fd.h

index dbeb6fb..5505db6 100644 (file)
@@ -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 <fd> and its state if needed. This should be