From 64f501be7e40906b9b91af86e1ceb1b770ad01ea Mon Sep 17 00:00:00 2001
From: root <root>
Date: Thu, 10 Apr 2008 06:48:12 +0000
Subject: *** empty log message ***

---
 ev_poll.c | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/ev_poll.c b/ev_poll.c
index a8fdebc..48d8593 100644
--- a/ev_poll.c
+++ b/ev_poll.c
@@ -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
-- 
cgit v1.2.3