Browse Source

avoid pendingpri < 0 during ev_run recursion

master
Marc Alexander Lehmann 9 years ago
parent
commit
2171938dcb
1 changed files with 14 additions and 12 deletions
  1. +14
    -12
      ev.c

+ 14
- 12
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


Loading…
Cancel
Save