ev_run() now returns whether the event has been requeued or not.

ev_run_list() now returns number of events which remain in the list.
This commit is contained in:
Martin Mares 1999-11-17 12:01:11 +00:00
parent ffb59d243a
commit 84a7d7f77c
2 changed files with 10 additions and 6 deletions

View file

@ -50,11 +50,13 @@ ev_new(pool *p)
return e; return e;
} }
inline void inline int
ev_run(event *e) ev_run(event *e)
{ {
if (!e->hook(e->data)) int keep = e->hook(e->data);
if (!keep)
ev_postpone(e); ev_postpone(e);
return keep;
} }
inline void inline void
@ -71,14 +73,16 @@ ev_schedule(event *e)
ev_enqueue(&global_event_list, e); ev_enqueue(&global_event_list, e);
} }
void int
ev_run_list(event_list *l) ev_run_list(event_list *l)
{ {
node *n, *p; node *n, *p;
int keep = 0;
WALK_LIST_DELSAFE(n, p, *l) WALK_LIST_DELSAFE(n, p, *l)
{ {
event *e = SKIP_BACK(event, n, n); event *e = SKIP_BACK(event, n, n);
ev_run(e); keep += ev_run(e);
} }
return keep;
} }

View file

@ -23,11 +23,11 @@ typedef list event_list;
extern event_list global_event_list; extern event_list global_event_list;
event *ev_new(pool *); event *ev_new(pool *);
void ev_run(event *); int ev_run(event *);
#define ev_init_list(el) init_list(el) #define ev_init_list(el) init_list(el)
void ev_enqueue(event_list *, event *); void ev_enqueue(event_list *, event *);
void ev_schedule(event *); void ev_schedule(event *);
void ev_postpone(event *); void ev_postpone(event *);
void ev_run_list(event_list *); int ev_run_list(event_list *);
#endif #endif