From acabdc7ff25f5be58cb711e5f4494ced2a93bd28 Mon Sep 17 00:00:00 2001 From: Herbert Wolverson Date: Tue, 11 Jul 2023 14:46:27 +0000 Subject: [PATCH] Re-add checked arithmetic to the packet counter. It may not solve the spike problem, but it should be there anyway. --- .../lqosd/src/throughput_tracker/tracking_data.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/rust/lqosd/src/throughput_tracker/tracking_data.rs b/src/rust/lqosd/src/throughput_tracker/tracking_data.rs index e95d906b..9e874a31 100644 --- a/src/rust/lqosd/src/throughput_tracker/tracking_data.rs +++ b/src/rust/lqosd/src/throughput_tracker/tracking_data.rs @@ -193,8 +193,15 @@ impl ThroughputTracker { #[inline(always)] fn add_atomic_tuple(tuple: &(AtomicU64, AtomicU64), n: (u64, u64)) { - tuple.0.fetch_add(n.0, std::sync::atomic::Ordering::Relaxed); - tuple.1.fetch_add(n.1, std::sync::atomic::Ordering::Relaxed); + let mut n0 = tuple.0.load(std::sync::atomic::Ordering::Relaxed); + if let Some(n) = n0.checked_add(n.0) { + tuple.0.store(n, std::sync::atomic::Ordering::Relaxed); + } + + let mut n1 = tuple.1.load(std::sync::atomic::Ordering::Relaxed); + if let Some(n) = n1.checked_add(n.1) { + tuple.1.store(n, std::sync::atomic::Ordering::Relaxed); + } } pub(crate) fn update_totals(&self) {