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.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=63e2ce61a84670ea46637fb7026fde0b6af9372b;p=thirdparty%2Fhaproxy.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 0b815b45b5..642b4d61f6 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 326d616078..8f20db26a5 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 e16968bcfe..455c4e1e91 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 97d42861fe..49e980f008 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]))