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)) }