--- IO-AIO/AIO.xs 2008/05/17 12:17:25 1.123 +++ IO-AIO/AIO.xs 2008/05/29 03:20:40 1.124 @@ -425,18 +425,18 @@ static int poll_cb (void) { - int res; - - do + for (;;) { - res = eio_poll (); + int res = eio_poll (); if (res > 0) croak (0); - } - while (max_outstanding && max_outstanding <= eio_nreqs ()); - return res; + if (!max_outstanding || max_outstanding > eio_nreqs ()) + return res; + + poll_wait (); + } } static void atfork_child (void)