]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: fd: Add fd_lock_tgid_cur().
authorOlivier Houchard <ohouchard@haproxy.com>
Wed, 29 Jan 2025 16:03:52 +0000 (17:03 +0100)
committerOlivier Houchard <cognet@ci0.org>
Wed, 26 Feb 2025 12:00:18 +0000 (13:00 +0100)
Add fd_lock_tgid_cur(), a function that will lock the tgid, without
modifying its value.

include/haproxy/fd.h

index cf00d1efb6afcda02e871ca5490a589f97f079f6..b9bdc8f4f74827908ccc36ab6d14039dd4e41fc1 100644 (file)
@@ -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().