From f3f23ee7eeeccc16aea2a5a6d0c9975b87333333 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 30 Jul 2025 21:27:30 +0000 Subject: [PATCH] Fix missing counter retirements (51931de94c). Signed-off-by: Jason Volk --- src/core/utils/two_phase_counter.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/core/utils/two_phase_counter.rs b/src/core/utils/two_phase_counter.rs index e0d9e263..214351a9 100644 --- a/src/core/utils/two_phase_counter.rs +++ b/src/core/utils/two_phase_counter.rs @@ -152,9 +152,15 @@ impl Result + Sync> State { debug_assert!(removed == id, "sequence number removed must match id"); - if index == 0 { - (self.release)(id).expect("release callback should not error"); + // release only occurs when the oldest value retires + if index != 0 { + return; } + + // release occurs for the maximum retired value + let release = if self.pending.is_empty() { self.dispatched } else { id }; + + (self.release)(release).expect("release callback should not error"); } /// Calculate the retired sequence number, one less than the lowest pending