MEDIUM: pollers: Use the new _HA_ATOMIC_* macros.
Use the new _HA_ATOMIC_* macros and add barriers where needed.
diff --git a/src/ev_epoll.c b/src/ev_epoll.c
index 0bb8c9f..039327d 100644
--- a/src/ev_epoll.c
+++ b/src/ev_epoll.c
@@ -72,7 +72,7 @@
if (!(fdtab[fd].thread_mask & tid_bit) || !(en & FD_EV_POLLED_RW)) {
/* fd removed from poll list */
opcode = EPOLL_CTL_DEL;
- HA_ATOMIC_AND(&polled_mask[fd], ~tid_bit);
+ _HA_ATOMIC_AND(&polled_mask[fd], ~tid_bit);
}
else {
/* fd status changed */
@@ -82,7 +82,7 @@
else if ((fdtab[fd].thread_mask & tid_bit) && (en & FD_EV_POLLED_RW)) {
/* new fd in the poll list */
opcode = EPOLL_CTL_ADD;
- HA_ATOMIC_OR(&polled_mask[fd], tid_bit);
+ _HA_ATOMIC_OR(&polled_mask[fd], tid_bit);
}
else {
return;
@@ -116,7 +116,7 @@
for (updt_idx = 0; updt_idx < fd_nbupdt; updt_idx++) {
fd = fd_updt[updt_idx];
- HA_ATOMIC_AND(&fdtab[fd].update_mask, ~tid_bit);
+ _HA_ATOMIC_AND(&fdtab[fd].update_mask, ~tid_bit);
if (!fdtab[fd].owner) {
activity[tid].poll_drop++;
continue;
@@ -186,7 +186,7 @@
/* FD has been migrated */
activity[tid].poll_skip++;
epoll_ctl(epoll_fd[tid], EPOLL_CTL_DEL, fd, &ev);
- HA_ATOMIC_AND(&polled_mask[fd], ~tid_bit);
+ _HA_ATOMIC_AND(&polled_mask[fd], ~tid_bit);
continue;
}
@@ -208,7 +208,7 @@
/* always remap RDHUP to HUP as they're used similarly */
if (e & EPOLLRDHUP) {
- HA_ATOMIC_OR(&cur_poller.flags, HAP_POLL_F_RDHUP);
+ _HA_ATOMIC_OR(&cur_poller.flags, HAP_POLL_F_RDHUP);
n |= FD_POLL_HUP;
}
fd_update_events(fd, n);
diff --git a/src/ev_kqueue.c b/src/ev_kqueue.c
index d097847..674551e 100644
--- a/src/ev_kqueue.c
+++ b/src/ev_kqueue.c
@@ -51,7 +51,7 @@
/* fd totally removed from poll list */
EV_SET(&kev[changes++], fd, EVFILT_READ, EV_DELETE, 0, 0, NULL);
EV_SET(&kev[changes++], fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL);
- HA_ATOMIC_AND(&polled_mask[fd], ~tid_bit);
+ _HA_ATOMIC_AND(&polled_mask[fd], ~tid_bit);
}
else {
/* OK fd has to be monitored, it was either added or changed */
@@ -66,7 +66,7 @@
else if (polled_mask[fd] & tid_bit)
EV_SET(&kev[changes++], fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL);
- HA_ATOMIC_OR(&polled_mask[fd], tid_bit);
+ _HA_ATOMIC_OR(&polled_mask[fd], tid_bit);
}
return changes;
}
@@ -89,7 +89,7 @@
for (updt_idx = 0; updt_idx < fd_nbupdt; updt_idx++) {
fd = fd_updt[updt_idx];
- HA_ATOMIC_AND(&fdtab[fd].update_mask, ~tid_bit);
+ _HA_ATOMIC_AND(&fdtab[fd].update_mask, ~tid_bit);
if (!fdtab[fd].owner) {
activity[tid].poll_drop++;
continue;
diff --git a/src/ev_poll.c b/src/ev_poll.c
index 40bde87..863b838 100644
--- a/src/ev_poll.c
+++ b/src/ev_poll.c
@@ -65,7 +65,7 @@
/* fd totally removed from poll list */
hap_fd_clr(fd, fd_evts[DIR_RD]);
hap_fd_clr(fd, fd_evts[DIR_WR]);
- HA_ATOMIC_AND(&polled_mask[fd], 0);
+ _HA_ATOMIC_AND(&polled_mask[fd], 0);
}
else {
/* OK fd has to be monitored, it was either added or changed */
@@ -79,7 +79,7 @@
else
hap_fd_set(fd, fd_evts[DIR_WR]);
- HA_ATOMIC_OR(&polled_mask[fd], tid_bit);
+ _HA_ATOMIC_OR(&polled_mask[fd], tid_bit);
if (fd > *max_add_fd)
*max_add_fd = fd;
}
@@ -106,7 +106,7 @@
for (updt_idx = 0; updt_idx < fd_nbupdt; updt_idx++) {
fd = fd_updt[updt_idx];
- HA_ATOMIC_AND(&fdtab[fd].update_mask, ~tid_bit);
+ _HA_ATOMIC_AND(&fdtab[fd].update_mask, ~tid_bit);
if (!fdtab[fd].owner) {
activity[tid].poll_drop++;
continue;
@@ -129,7 +129,7 @@
* we don't need every thread ot take care of the
* update.
*/
- HA_ATOMIC_AND(&fdtab[fd].update_mask, ~all_threads_mask);
+ _HA_ATOMIC_AND(&fdtab[fd].update_mask, ~all_threads_mask);
done_update_polling(fd);
} else
continue;
@@ -140,7 +140,7 @@
/* maybe we added at least one fd larger than maxfd */
for (old_maxfd = maxfd; old_maxfd <= max_add_fd; ) {
- if (HA_ATOMIC_CAS(&maxfd, &old_maxfd, max_add_fd + 1))
+ if (_HA_ATOMIC_CAS(&maxfd, &old_maxfd, max_add_fd + 1))
break;
}
@@ -156,7 +156,7 @@
new_maxfd--;
if (new_maxfd >= old_maxfd)
break;
- } while (!HA_ATOMIC_CAS(&maxfd, &old_maxfd, new_maxfd));
+ } while (!_HA_ATOMIC_CAS(&maxfd, &old_maxfd, new_maxfd));
thread_harmless_now();
@@ -235,7 +235,7 @@
/* always remap RDHUP to HUP as they're used similarly */
if (e & POLLRDHUP) {
- HA_ATOMIC_OR(&cur_poller.flags, HAP_POLL_F_RDHUP);
+ _HA_ATOMIC_OR(&cur_poller.flags, HAP_POLL_F_RDHUP);
n |= FD_POLL_HUP;
}
fd_update_events(fd, n);
diff --git a/src/ev_select.c b/src/ev_select.c
index f9b1215..3591f1e 100644
--- a/src/ev_select.c
+++ b/src/ev_select.c
@@ -56,7 +56,7 @@
/* fd totally removed from poll list */
hap_fd_clr(fd, fd_evts[DIR_RD]);
hap_fd_clr(fd, fd_evts[DIR_WR]);
- HA_ATOMIC_AND(&polled_mask[fd], 0);
+ _HA_ATOMIC_AND(&polled_mask[fd], 0);
}
else {
/* OK fd has to be monitored, it was either added or changed */
@@ -70,7 +70,7 @@
else
hap_fd_set(fd, fd_evts[DIR_WR]);
- HA_ATOMIC_OR(&polled_mask[fd], tid_bit);
+ _HA_ATOMIC_OR(&polled_mask[fd], tid_bit);
if (fd > *max_add_fd)
*max_add_fd = fd;
}
@@ -98,7 +98,7 @@
for (updt_idx = 0; updt_idx < fd_nbupdt; updt_idx++) {
fd = fd_updt[updt_idx];
- HA_ATOMIC_AND(&fdtab[fd].update_mask, ~tid_bit);
+ _HA_ATOMIC_AND(&fdtab[fd].update_mask, ~tid_bit);
if (!fdtab[fd].owner) {
activity[tid].poll_drop++;
continue;
@@ -120,7 +120,7 @@
* we don't need every thread ot take care of the
* update.
*/
- HA_ATOMIC_AND(&fdtab[fd].update_mask, ~all_threads_mask);
+ _HA_ATOMIC_AND(&fdtab[fd].update_mask, ~all_threads_mask);
done_update_polling(fd);
} else
continue;
@@ -132,7 +132,7 @@
/* maybe we added at least one fd larger than maxfd */
for (old_maxfd = maxfd; old_maxfd <= max_add_fd; ) {
- if (HA_ATOMIC_CAS(&maxfd, &old_maxfd, max_add_fd + 1))
+ if (_HA_ATOMIC_CAS(&maxfd, &old_maxfd, max_add_fd + 1))
break;
}
@@ -148,7 +148,7 @@
new_maxfd--;
if (new_maxfd >= old_maxfd)
break;
- } while (!HA_ATOMIC_CAS(&maxfd, &old_maxfd, new_maxfd));
+ } while (!_HA_ATOMIC_CAS(&maxfd, &old_maxfd, new_maxfd));
thread_harmless_now();