diff options
-rw-r--r-- | ev.c | 26 |
1 files changed, 14 insertions, 12 deletions
@@ -2764,15 +2764,21 @@ ev_pending_count (EV_P) EV_THROW void noinline ev_invoke_pending (EV_P) { - for (pendingpri = NUMPRI; pendingpri--; ) /* pendingpri is modified during the loop */ - while (pendingcnt [pendingpri]) - { - ANPENDING *p = pendings [pendingpri] + --pendingcnt [pendingpri]; + pendingpri = NUMPRI; - p->w->pending = 0; - EV_CB_INVOKE (p->w, p->events); - EV_FREQUENT_CHECK; - } + while (pendingpri) /* pendingpri possibly gets modified in the inner loop */ + { + --pendingpri; + + while (pendingcnt [pendingpri]) + { + ANPENDING *p = pendings [pendingpri] + --pendingcnt [pendingpri]; + + p->w->pending = 0; + EV_CB_INVOKE (p->w, p->events); + EV_FREQUENT_CHECK; + } + } } #if EV_IDLE_ENABLE @@ -3180,10 +3186,6 @@ ev_run (EV_P_ int flags) if (loop_done == EVBREAK_ONE) loop_done = EVBREAK_CANCEL; - /* pendingpri is normally -1 here, which is not a good */ - /* value when returning to an ev_invoke_pending */ - pendingpri = NUMPRI - 1; - #if EV_FEATURE_API --loop_depth; #endif |