From 8d8db27442de797999f2facd44ec6bdb59143efc Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 5 Jan 2023 22:19:31 -0800 Subject: [PATCH] tokio: add load and compare_exchange_weak to loom StaticAtomicU64 (#5356) --- .../loom/std/atomic_u64_static_once_cell.rs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tokio/src/loom/std/atomic_u64_static_once_cell.rs b/tokio/src/loom/std/atomic_u64_static_once_cell.rs index 14b3a54937b..40c6172a524 100644 --- a/tokio/src/loom/std/atomic_u64_static_once_cell.rs +++ b/tokio/src/loom/std/atomic_u64_static_once_cell.rs @@ -23,6 +23,10 @@ impl StaticAtomicU64 { } } + pub(crate) fn load(&self, order: Ordering) -> u64 { + *self.inner().lock() + } + pub(crate) fn fetch_add(&self, val: u64, order: Ordering) -> u64 { let mut lock = self.inner().lock(); let prev = *lock; @@ -30,6 +34,23 @@ impl StaticAtomicU64 { prev } + pub(crate) fn compare_exchange_weak( + &self, + current: u64, + new: u64, + _success: Ordering, + _failure: Ordering, + ) -> Result { + let mut lock = self.inner().lock(); + + if *lock == current { + *lock = new; + Ok(current) + } else { + Err(*lock) + } + } + fn inner(&self) -> &Mutex { self.cell.get(|| Mutex::new(self.init)) }