From 01b2530a7d9ee9a784286c4b90b4c2e8c560ac87 Mon Sep 17 00:00:00 2001 From: deepikabhavnani Date: Wed, 19 Dec 2018 11:50:33 -0600 Subject: [PATCH] Corrected destructor loop to clear all pending events In `equeue_destroy` the external loop was for main events linked list and internal loop for siblings. Siblings start was not initialized correctly for each main link --- events/equeue/equeue.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/events/equeue/equeue.c b/events/equeue/equeue.c index 19c7ffee9e..d89d5c62f0 100644 --- a/events/equeue/equeue.c +++ b/events/equeue/equeue.c @@ -108,13 +108,15 @@ void equeue_destroy(equeue_t *q) { // call destructors on pending events for (struct equeue_event *es = q->queue; es; es = es->next) { - for (struct equeue_event *e = q->queue; e; e = e->sibling) { + for (struct equeue_event *e = es->sibling; e; e = e->sibling) { if (e->dtor) { e->dtor(e + 1); } } + if (es->dtor) { + es->dtor(es + 1); + } } - // notify background timer if (q->background.update) { q->background.update(q->background.timer, -1);