From: Christopher Faulet Date: Fri, 2 Jun 2017 12:36:39 +0000 (+0200) Subject: MINOR: threads/polling: pollers now handle FDs depending on the process mask X-Git-Tag: v1.8-rc1~152 X-Git-Url: http://git.haproxy.org/?a=commitdiff_plain;h=63e2ce61a84670ea46637fb7026fde0b6af9372b;p=haproxy-3.0.git MINOR: threads/polling: pollers now handle FDs depending on the process mask --- diff --git a/src/ev_epoll.c b/src/ev_epoll.c index 0b815b4..642b4d6 100644 --- a/src/ev_epoll.c +++ b/src/ev_epoll.c @@ -136,7 +136,7 @@ REGPRM2 static void _do_poll(struct poller *p, int exp) unsigned int e = epoll_events[count].events; fd = epoll_events[count].data.fd; - if (!fdtab[fd].owner) + if (!fdtab[fd].owner || !(fdtab[fd].process_mask & tid_bit)) continue; /* it looks complicated but gcc can optimize it away when constants diff --git a/src/ev_kqueue.c b/src/ev_kqueue.c index 326d616..8f20db2 100644 --- a/src/ev_kqueue.c +++ b/src/ev_kqueue.c @@ -122,7 +122,7 @@ REGPRM2 static void _do_poll(struct poller *p, int exp) unsigned int n = 0; fd = kev[count].ident; - if (!fdtab[fd].owner) + if (!fdtab[fd].owner || !(fdtab[fd].process_mask & tid_bit)) continue; if (kev[count].filter == EVFILT_READ) { diff --git a/src/ev_poll.c b/src/ev_poll.c index e16968b..455c4e1 100644 --- a/src/ev_poll.c +++ b/src/ev_poll.c @@ -111,6 +111,10 @@ REGPRM2 static void _do_poll(struct poller *p, int exp) continue; for (count = 0, fd = fds * 8*sizeof(**fd_evts); count < 8*sizeof(**fd_evts) && fd < maxfd; count++, fd++) { + + if (!fdtab[fd].owner || !(fdtab[fd].process_mask & tid_bit)) + continue; + sr = (rn >> count) & 1; sw = (wn >> count) & 1; if ((sr|sw)) { diff --git a/src/ev_select.c b/src/ev_select.c index 97d4286..49e980f 100644 --- a/src/ev_select.c +++ b/src/ev_select.c @@ -141,7 +141,7 @@ REGPRM2 static void _do_poll(struct poller *p, int exp) /* if we specify read first, the accepts and zero reads will be * seen first. Moreover, system buffers will be flushed faster. */ - if (!fdtab[fd].owner) + if (!fdtab[fd].owner || !(fdtab[fd].process_mask & tid_bit)) continue; if (FD_ISSET(fd, tmp_evts[DIR_RD]))