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.
This commit is contained in:
Willy Tarreau 2021-03-24 10:27:56 +01:00
parent 1e8433f594
commit 6e8e10b415

View File

@ -347,10 +347,12 @@ static inline void fd_set_running_excl(int fd)
old_mask = 0; old_mask = 0;
} }
/* remove tid_bit from the fd's running mask and returns the bits that remain
static inline void fd_clr_running(int fd) * 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 /* Update events seen for FD <fd> and its state if needed. This should be