mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 07:37:02 +02:00
MEDIUM: pollers: Use the new _HA_ATOMIC_* macros.
Use the new _HA_ATOMIC_* macros and add barriers where needed.
This commit is contained in:
parent
7059c55463
commit
cb6c9274ae
@ -72,7 +72,7 @@ static void _update_fd(int fd)
|
||||
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 @@ static void _update_fd(int fd)
|
||||
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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
/* 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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
|
||||
/* 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);
|
||||
|
@ -51,7 +51,7 @@ static int _update_fd(int fd, int start)
|
||||
/* 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 @@ static int _update_fd(int fd, int start)
|
||||
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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
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;
|
||||
|
@ -65,7 +65,7 @@ static void _update_fd(int fd, int *max_add_fd)
|
||||
/* 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 @@ static void _update_fd(int fd, int *max_add_fd)
|
||||
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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
* 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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
|
||||
/* 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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
|
||||
/* 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);
|
||||
|
@ -56,7 +56,7 @@ static void _update_fd(int fd, int *max_add_fd)
|
||||
/* 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 @@ static void _update_fd(int fd, int *max_add_fd)
|
||||
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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
* 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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
|
||||
/* 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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
||||
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();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user