summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/event.c4
-rw-r--r--lib/lists.h3
2 files changed, 5 insertions, 2 deletions
diff --git a/lib/event.c b/lib/event.c
index 9b5870d3..55a9c487 100644
--- a/lib/event.c
+++ b/lib/event.c
@@ -125,13 +125,13 @@ ev_schedule(event *e)
int
ev_run_list(event_list *l)
{
- node *n, *p;
+ node *n;
list tmp_list;
init_list(&tmp_list);
add_tail_list(&tmp_list, l);
init_list(l);
- WALK_LIST_DELSAFE(n, p, tmp_list)
+ WALK_LIST_FIRST(n, tmp_list)
{
event *e = SKIP_BACK(event, n, n);
ev_run(e);
diff --git a/lib/lists.h b/lib/lists.h
index 5b36ec83..342dfd62 100644
--- a/lib/lists.h
+++ b/lib/lists.h
@@ -37,6 +37,9 @@ typedef struct list { /* In fact two overlayed nodes */
n=(void *)((NODE (n))->next))
#define WALK_LIST_DELSAFE(n,nxt,list) \
for(n=HEAD(list); nxt=(void *)((NODE (n))->next); n=(void *) nxt)
+/* WALK_LIST_FIRST supposes that called code removes each processed node */
+#define WALK_LIST_FIRST(n,list) \
+ while(n=HEAD(list), (NODE (n))->next)
#define WALK_LIST_BACKWARDS(n,list) for(n=TAIL(list);(NODE (n))->prev; \
n=(void *)((NODE (n))->prev))
#define WALK_LIST_BACKWARDS_DELSAFE(n,prv,list) \