From bbcfac20a69bbd2af8d46cc498116b0b4798262d Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 26 Mar 2025 11:18:40 -0400 Subject: [PATCH] prioq: invalidate index pointers on removal --- src/basic/prioq.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/basic/prioq.c b/src/basic/prioq.c index b3cf88ecad1..194bd5e7eb3 100644 --- a/src/basic/prioq.c +++ b/src/basic/prioq.c @@ -46,6 +46,11 @@ Prioq* prioq_free(Prioq *q) { if (!q) return NULL; + /* Invalidate the index fields of any remaining objects */ + FOREACH_ARRAY(item, q->items, q->n_items) + if (item->idx) + *(item->idx) = PRIOQ_IDX_NULL; + free(q->items); return mfree(q); } @@ -178,6 +183,11 @@ static void remove_item(Prioq *q, struct prioq_item *i) { assert(q); assert(i); + /* Let's invalidate the index pointer stored in the user's object to indicate the item is now removed + * from the priority queue */ + if (i->idx) + *(i->idx) = PRIOQ_IDX_NULL; + l = q->items + q->n_items - 1; if (i == l) -- 2.47.3