mirror of /home/gitosis/repositories/libev.git
avoid pendingpri < 0 during ev_run recursion
This commit is contained in:
parent
0ad98b6efa
commit
2171938dcb
26
ev.c
26
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
|
||||
|
|
Loading…
Reference in New Issue