avoid pendingpri < 0 during ev_run recursion

This commit is contained in:
Marc Alexander Lehmann 2012-06-02 11:15:29 +00:00
parent 0ad98b6efa
commit 2171938dcb
1 changed files with 14 additions and 12 deletions

26
ev.c
View File

@ -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