From c74c5f2d6cd2988f4350a656be84b675c8dc5dd9 Mon Sep 17 00:00:00 2001 From: evoskuil Date: Fri, 10 Jul 2026 15:52:08 -0400 Subject: [PATCH 1/2] Handle closed() within confirmation loop. --- src/chasers/chaser_confirm.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/chasers/chaser_confirm.cpp b/src/chasers/chaser_confirm.cpp index 0ea9822c..f6ea898d 100644 --- a/src/chasers/chaser_confirm.cpp +++ b/src/chasers/chaser_confirm.cpp @@ -188,7 +188,7 @@ void chaser_confirm::reorganize(header_states& fork, size_t top, const auto& query = archive(); header_links popped{}; - while (top > fork_point) + while (top > fork_point && !closed()) { const auto link = query.to_confirmed(top); if (link.is_terminal()) @@ -223,6 +223,9 @@ void chaser_confirm::organize(header_states& fork, const header_links& popped, // Continue when suspended as write error terminates synchronous loop. for (const auto& state: fork) { + if (closed()) + return; + switch (state.ec.value()) { case database::error::bypassed: From 5ea2ade9d64d63784d87a5c6aa8b2c5677662a61 Mon Sep 17 00:00:00 2001 From: evoskuil Date: Fri, 10 Jul 2026 15:52:30 -0400 Subject: [PATCH 2/2] Comment. --- src/chasers/chaser_validate_batch.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/chasers/chaser_validate_batch.cpp b/src/chasers/chaser_validate_batch.cpp index dec1f32a..931a38c3 100644 --- a/src/chasers/chaser_validate_batch.cpp +++ b/src/chasers/chaser_validate_batch.cpp @@ -239,6 +239,7 @@ bool chaser_validate::mark_valids(bool startup) NOEXCEPT std::atomic_bool fault{}; constexpr auto parallel = poolstl::execution::par; + // Allow valids to drain when closed. std::for_each(parallel, batched_.cbegin(), batched_.cend(), [&](auto link) NOEXCEPT {