Use standard parity and saturating generation operations

This commit is contained in:
2026-09-24 20:29:46 -07:00
parent d93c0a8012
commit 572e96ba03
@@ -15,7 +15,7 @@ impl Lifetime {
/// Even generations are idle; odd generations belong to one live gesture. /// Even generations are idle; odd generations belong to one live gesture.
pub(super) fn idle(&self) -> Option<u64> { pub(super) fn idle(&self) -> Option<u64> {
let generation = self.0.load(Ordering::SeqCst); let generation = self.0.load(Ordering::SeqCst);
(generation % 2 == 0).then_some(generation) generation.is_multiple_of(2).then_some(generation)
} }
/// Retire an idle packet at a native input boundary (including the /// Retire an idle packet at a native input boundary (including the
@@ -23,7 +23,7 @@ impl Lifetime {
pub(super) fn revoke_idle(&self) { pub(super) fn revoke_idle(&self) {
if let Some(generation) = self.idle() { if let Some(generation) = self.idle() {
// Keep overflow terminal and unavailable rather than reusing zero. // Keep overflow terminal and unavailable rather than reusing zero.
let next = generation.checked_add(2).unwrap_or(u64::MAX); let next = generation.saturating_add(2);
let _ = self let _ = self
.0 .0
.compare_exchange(generation, next, Ordering::SeqCst, Ordering::SeqCst); .compare_exchange(generation, next, Ordering::SeqCst, Ordering::SeqCst);