From: Lennart Poettering Date: Wed, 26 Mar 2025 15:18:40 +0000 (-0400) Subject: prioq: invalidate index pointers on removal X-Git-Tag: v258-rc1~941^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bbcfac20a69bbd2af8d46cc498116b0b4798262d;p=thirdparty%2Fsystemd.git prioq: invalidate index pointers on removal --- 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)