From: Olivier Houchard Date: Wed, 29 Jan 2025 16:03:52 +0000 (+0100) Subject: MINOR: fd: Add fd_lock_tgid_cur(). X-Git-Tag: v3.2-dev7~63 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c5cc09c00dc87fc07a6860483cac4e73e36ebd5b;p=thirdparty%2Fhaproxy.git MINOR: fd: Add fd_lock_tgid_cur(). Add fd_lock_tgid_cur(), a function that will lock the tgid, without modifying its value. --- diff --git a/include/haproxy/fd.h b/include/haproxy/fd.h index cf00d1efb..b9bdc8f4f 100644 --- a/include/haproxy/fd.h +++ b/include/haproxy/fd.h @@ -364,6 +364,20 @@ static inline void fd_lock_tgid(int fd, uint desired_tgid) } } +/* + * Try to lock the tgid, keeping the current tgid value. + * Returns 1 on success, or 0 on failure. + */ +static inline int fd_lock_tgid_cur(int fd) +{ + uint old = _HA_ATOMIC_LOAD(&fdtab[fd].refc_tgid) & 0x7fff; + + if (_HA_ATOMIC_CAS(&fdtab[fd].refc_tgid, &old, (old | 0x8000) + 0x10000)) + return 1; + return 0; +} + + /* Grab a reference to the FD's TGID, and return the tgid. Note that a TGID of * zero indicates the FD was closed, thus also fails (i.e. no need to drop it). * On non-zero (success), the caller must release it using fd_drop_tgid().