MINOR: fd: optimize fd_claim_tgid() for use in fd_insert()

fd_claim_tgid() uses a CAS to set the desired TGID on the FD. It's only
called from fd_insert() where in the vast majority of cases, the tgid
and refcount are zero before the call. However the loop was optimized
for the case where it was equal to the desired TGID, systematically
causing one extra round in the loop there. Better start assuming a
zero value.
This commit is contained in:
Willy Tarreau 2023-04-13 15:22:42 +02:00
parent 97da942ba6
commit 4d882bd800

View file

@ -382,12 +382,12 @@ static inline void fd_claim_tgid(int fd, uint desired_tgid)
BUG_ON(!desired_tgid);
desired_tgid += 0x10000; // refcount=1
old = desired_tgid;
old = 0; // assume unused (most likely)
while (1) {
old &= 0xffff;
if (_HA_ATOMIC_CAS(&fdtab[fd].refc_tgid, &old, desired_tgid))
break;
__ha_cpu_relax();
old &= 0xffff;
}
}