mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 14:21:25 +02:00
MINOR: threads: use faster locks for the spin locks
The spin locks used to rely on W locks, which involve a loop waiting for readers to leave, and this doesn't happen here. It's more efficient to use S locks instead, which are also mutually exclusive and do not have this loop. This saves one test per spinlock and a few tens of bytes allowing certain functions to be inlined.
This commit is contained in:
parent
ce4e0aa7f3
commit
88ac59be4d
@ -191,9 +191,9 @@ extern struct lock_stat lock_stats[LOCK_LABELS];
|
||||
|
||||
#define __SPIN_INIT(l) ({ (*l) = 0; })
|
||||
#define __SPIN_DESTROY(l) ({ (*l) = 0; })
|
||||
#define __SPIN_LOCK(l) pl_take_w(l)
|
||||
#define __SPIN_TRYLOCK(l) !pl_try_w(l)
|
||||
#define __SPIN_UNLOCK(l) pl_drop_w(l)
|
||||
#define __SPIN_LOCK(l) pl_take_s(l)
|
||||
#define __SPIN_TRYLOCK(l) !pl_try_s(l)
|
||||
#define __SPIN_UNLOCK(l) pl_drop_s(l)
|
||||
|
||||
#define __HA_RWLOCK_T unsigned long
|
||||
|
||||
@ -552,9 +552,9 @@ static inline void __spin_unlock(enum lock_label lbl, struct ha_spinlock *l,
|
||||
|
||||
#define SPIN_INIT(l) ({ (*l) = 0; })
|
||||
#define SPIN_DESTROY(l) ({ (*l) = 0; })
|
||||
#define SPIN_LOCK(lbl, l) pl_take_w(l)
|
||||
#define SPIN_TRYLOCK(lbl, l) !pl_try_w(l)
|
||||
#define SPIN_UNLOCK(lbl, l) pl_drop_w(l)
|
||||
#define SPIN_LOCK(lbl, l) pl_take_s(l)
|
||||
#define SPIN_TRYLOCK(lbl, l) !pl_try_s(l)
|
||||
#define SPIN_UNLOCK(lbl, l) pl_drop_s(l)
|
||||
|
||||
#define HA_RWLOCK_T unsigned long
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user