diff --git a/src/ev_epoll.c b/src/ev_epoll.c index 3edaf288c..b98ca8ca8 100644 --- a/src/ev_epoll.c +++ b/src/ev_epoll.c @@ -79,10 +79,8 @@ REGPRM2 static void _do_poll(struct poller *p, int exp) continue; } - HA_SPIN_LOCK(FD_LOCK, &fdtab[fd].lock); - fdtab[fd].update_mask &= ~tid_bit; en = fdtab[fd].state; - HA_SPIN_UNLOCK(FD_LOCK, &fdtab[fd].lock); + HA_ATOMIC_AND(&fdtab[fd].update_mask, ~tid_bit); if (fdtab[fd].polled_mask & tid_bit) { if (!(fdtab[fd].thread_mask & tid_bit) || !(en & FD_EV_POLLED_RW)) { diff --git a/src/ev_kqueue.c b/src/ev_kqueue.c index fcd04fda9..cc96307b0 100644 --- a/src/ev_kqueue.c +++ b/src/ev_kqueue.c @@ -52,10 +52,8 @@ REGPRM2 static void _do_poll(struct poller *p, int exp) continue; } - HA_SPIN_LOCK(FD_LOCK, &fdtab[fd].lock); - fdtab[fd].update_mask &= ~tid_bit; en = fdtab[fd].state; - HA_SPIN_UNLOCK(FD_LOCK, &fdtab[fd].lock); + HA_ATOMIC_AND(&fdtab[fd].update_mask, ~tid_bit); if (!(fdtab[fd].thread_mask & tid_bit) || !(en & FD_EV_POLLED_RW)) { if (!(fdtab[fd].polled_mask & tid_bit)) { diff --git a/src/ev_poll.c b/src/ev_poll.c index 22cb22757..edcfe6565 100644 --- a/src/ev_poll.c +++ b/src/ev_poll.c @@ -70,10 +70,8 @@ REGPRM2 static void _do_poll(struct poller *p, int exp) continue; } - HA_SPIN_LOCK(FD_LOCK, &fdtab[fd].lock); - fdtab[fd].update_mask &= ~tid_bit; en = fdtab[fd].state; - HA_SPIN_UNLOCK(FD_LOCK, &fdtab[fd].lock); + HA_ATOMIC_AND(&fdtab[fd].update_mask, ~tid_bit); /* we have a single state for all threads, which is why we * don't check the tid_bit. First thread to see the update diff --git a/src/ev_select.c b/src/ev_select.c index db0814d6e..6e834678d 100644 --- a/src/ev_select.c +++ b/src/ev_select.c @@ -62,10 +62,8 @@ REGPRM2 static void _do_poll(struct poller *p, int exp) continue; } - HA_SPIN_LOCK(FD_LOCK, &fdtab[fd].lock); - fdtab[fd].update_mask &= ~tid_bit; en = fdtab[fd].state; - HA_SPIN_UNLOCK(FD_LOCK, &fdtab[fd].lock); + HA_ATOMIC_AND(&fdtab[fd].update_mask, ~tid_bit); /* we have a single state for all threads, which is why we * don't check the tid_bit. First thread to see the update