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:
parent
ffb59d243a
commit
84a7d7f77c
2 changed files with 10 additions and 6 deletions
12
lib/event.c
12
lib/event.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue