|
|
|
@ -86,7 +86,7 @@ poll_modify (EV_P_ int fd, int oev, int nev)
|
|
|
|
|
static void
|
|
|
|
|
poll_poll (EV_P_ ev_tstamp timeout)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
struct pollfd *p;
|
|
|
|
|
int res = poll (polls, pollcnt, (int)ceil (timeout * 1000.));
|
|
|
|
|
|
|
|
|
|
if (expect_false (res < 0))
|
|
|
|
@ -98,17 +98,22 @@ poll_poll (EV_P_ ev_tstamp timeout)
|
|
|
|
|
else if (errno != EINTR)
|
|
|
|
|
syserr ("(libev) poll");
|
|
|
|
|
}
|
|
|
|
|
else if (res > 0)
|
|
|
|
|
for (i = 0; i < pollcnt; ++i)
|
|
|
|
|
if (expect_false (polls [i].revents & POLLNVAL))
|
|
|
|
|
fd_kill (EV_A_ polls [i].fd);
|
|
|
|
|
else
|
|
|
|
|
fd_event (
|
|
|
|
|
EV_A_
|
|
|
|
|
polls [i].fd,
|
|
|
|
|
(polls [i].revents & (POLLOUT | POLLERR | POLLHUP) ? EV_WRITE : 0)
|
|
|
|
|
| (polls [i].revents & (POLLIN | POLLERR | POLLHUP) ? EV_READ : 0)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
for (p = polls; res; ++p)
|
|
|
|
|
if (expect_false (p->revents)) /* this expect is debatable */
|
|
|
|
|
{
|
|
|
|
|
--res;
|
|
|
|
|
|
|
|
|
|
if (expect_false (p->revents & POLLNVAL))
|
|
|
|
|
fd_kill (EV_A_ p->fd);
|
|
|
|
|
else
|
|
|
|
|
fd_event (
|
|
|
|
|
EV_A_
|
|
|
|
|
p->fd,
|
|
|
|
|
(p->revents & (POLLOUT | POLLERR | POLLHUP) ? EV_WRITE : 0)
|
|
|
|
|
| (p->revents & (POLLIN | POLLERR | POLLHUP) ? EV_READ : 0)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int inline_size
|
|
|
|
|