diff options
| -rw-r--r-- | ev_poll.c | 29 | 
1 files changed, 17 insertions, 12 deletions
| @@ -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 | 
