diff options
author | Martin Mares <mj@ucw.cz> | 1999-11-17 12:01:11 +0000 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 1999-11-17 12:01:11 +0000 |
commit | 84a7d7f77c05578d9ebfff90672e73f021999d25 (patch) | |
tree | 30e57fa3bf32b130ae88faf51f30e1159a138ffa /lib | |
parent | ffb59d243a350ed525850e864b38af0ecb0ffea5 (diff) |
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.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/event.c | 12 | ||||
-rw-r--r-- | lib/event.h | 4 |
2 files changed, 10 insertions, 6 deletions
diff --git a/lib/event.c b/lib/event.c index e9ae3be7..8f72a70c 100644 --- a/lib/event.c +++ b/lib/event.c @@ -50,11 +50,13 @@ ev_new(pool *p) 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 @@ -71,14 +73,16 @@ ev_schedule(event *e) 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; } diff --git a/lib/event.h b/lib/event.h index 0856fbb0..32a9a3fa 100644 --- a/lib/event.h +++ b/lib/event.h @@ -23,11 +23,11 @@ typedef list event_list; 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 |