[BUG] event pollers must not wait if a task exists in the run queue
Under some circumstances, a task may already lie in the run queue
(eg: inter-task wakeup). It is disastrous to wait for an event in
this case because some processing gets delayed.
diff --git a/src/ev_kqueue.c b/src/ev_kqueue.c
index 773db74..f34cdc3 100644
--- a/src/ev_kqueue.c
+++ b/src/ev_kqueue.c
@@ -106,7 +106,11 @@
struct timespec timeout, *to_ptr;
to_ptr = NULL; // no timeout
- if (tv_isset(exp)) {
+ if (run_queue) {
+ timeout.tv_sec = timeout.tv_nsec = 0;
+ to_ptr = &timeout;
+ }
+ else if (tv_isset(exp)) {
struct timeval delta;
if (tv_isge(&now, exp))