From fa39d6ffe7c96345c211991e9362e63c62f7f73f Mon Sep 17 00:00:00 2001 From: deepikabhavnani Date: Tue, 18 Dec 2018 17:12:10 -0600 Subject: [PATCH] Old pointers of sibling were not cleared When adding sibling at the head of linked list, the head if pointing to something in linked list was not updated, hence a loop was formed in linked list Element0 - First addition to linked list Element1 - Has higher delay hence added to back 0 ->(next) 1 Element2 - Delay is same as Element0, hence should be sibling of 0 Shall be added at head Expected: 2 ------------->(next) 1 |(sibling) 0 Bug: (Resolved with this) 2 ------------->(next) 1 |(sibling) 0 ------------->(next) 1 If we add more elements and next pointer of sibling is updated, old references will cause issues Element3 added Expected: 2 ------------->(next) 3 ------------->(next) 1 |(sibling) 0 Bug: (Resolved with this) 2 ------------->(next) 3 ------------->(next) 1 |(sibling) 0 ------------->(next) 1 ***Both siblings here point to different next*** --- events/equeue/equeue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/events/equeue/equeue.c b/events/equeue/equeue.c index 4d985539da..19c7ffee9e 100644 --- a/events/equeue/equeue.c +++ b/events/equeue/equeue.c @@ -239,8 +239,8 @@ static int equeue_enqueue(equeue_t *q, struct equeue_event *e, unsigned tick) if (e->next) { e->next->ref = &e->next; } - e->sibling = *p; + e->sibling->next = 0; e->sibling->ref = &e->sibling; } else { e->next = *p;