ev_run_list() now returns number of events which remain in the list.
return e;
}
-inline void
+inline int
ev_run(event *e)
{
- if (!e->hook(e->data))
+ int keep = e->hook(e->data);
+ if (!keep)
ev_postpone(e);
+ return keep;
}
inline void
ev_enqueue(&global_event_list, e);
}
-void
+int
ev_run_list(event_list *l)
{
node *n, *p;
+ int keep = 0;
WALK_LIST_DELSAFE(n, p, *l)
{
event *e = SKIP_BACK(event, n, n);
- ev_run(e);
+ keep += ev_run(e);
}
+ return keep;
}
extern event_list global_event_list;
event *ev_new(pool *);
-void ev_run(event *);
+int ev_run(event *);
#define ev_init_list(el) init_list(el)
void ev_enqueue(event_list *, event *);
void ev_schedule(event *);
void ev_postpone(event *);
-void ev_run_list(event_list *);
+int ev_run_list(event_list *);
#endif