From 2171938dcb3ae9a3ab558bff232b875d85383649 Mon Sep 17 00:00:00 2001 From: Marc Alexander Lehmann Date: Sat, 2 Jun 2012 11:15:29 +0000 Subject: [PATCH] avoid pendingpri < 0 during ev_run recursion --- ev.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/ev.c b/ev.c index 20bc3b0..52ee05c 100644 --- a/ev.c +++ b/ev.c @@ -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 -- 2.39.2