From 741a184a31127305fb4363833ca9d97a1057fc68 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Sat, 17 May 2025 16:59:32 +0200 Subject: [PATCH] core/manager: do not pop gc_unit_queue before unit_gc_sweep() Follow-up for 52e3671bf7e6321c58c6d3a6c8ad8e167259a569 unit_gc_sweep() might try to add the unit to gc queue again. While that becomes no-op as Unit.in_gc_queue is not cleared yet, it induces minor inconsistency of states. --- src/core/manager.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/manager.c b/src/core/manager.c index 4f6232e8ad..ebad062bd3 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -1367,7 +1367,6 @@ good: static unsigned manager_dispatch_gc_unit_queue(Manager *m) { unsigned n = 0, gc_marker; - Unit *u; assert(m); @@ -1379,11 +1378,13 @@ static unsigned manager_dispatch_gc_unit_queue(Manager *m) { gc_marker = m->gc_marker; - while ((u = LIST_POP(gc_queue, m->gc_unit_queue))) { + Unit *u; + while ((u = m->gc_unit_queue)) { assert(u->in_gc_queue); unit_gc_sweep(u, gc_marker); + LIST_REMOVE(gc_queue, m->gc_unit_queue, u); u->in_gc_queue = false; n++;