diff --git a/events.c b/events.c index e2a0ca4..30af760 100644 --- a/events.c +++ b/events.c @@ -72,3 +72,15 @@ event_destroy(EventNode * self) self->next = NULL; free(self); } + +void event_destroy_all() +{ + EventNode *ev; + while ((ev = FIRST_EVENT) != &END_EVENTS) { + event_destroy(ev); + if (ev == FIRST_EVENT) { + fprintf(stderr, "Broken doubly linked event list invariant\n"); + abort(); + } + } +} diff --git a/events.h b/events.h index 134e6c4..09cf33e 100644 --- a/events.h +++ b/events.h @@ -47,5 +47,6 @@ extern EventNode END_EVENTS; size_t event_replicate(EventNode * source, size_t count); EventNode * event_create(const EventData * content); void event_destroy(EventNode * self); +void event_destroy_all(); #endif /* end of include guard: EVENTS_H_ */ diff --git a/main.c b/main.c index 00cd458..137c9be 100644 --- a/main.c +++ b/main.c @@ -82,6 +82,7 @@ main(int argc, char ** argv) for (ssize_t i = loaded_config.nodes.length - 1; i >= 0; --i) { graph_node_delete(nodes[i]); } + event_destroy_all(); free(channels); free(nodes);