From e3d8d80d2d8744ccdcd175323e0864c8f30fcedc Mon Sep 17 00:00:00 2001 From: Haibo Huang Date: Tue, 9 Feb 2021 18:18:56 -0800 Subject: Upgrade rust/crates/tokio to 1.2.0 Test: make Change-Id: Ib0f6a5201b51e9d122b6e867388a3856e16f803a --- src/loom/std/atomic_u64.rs | 31 +++++++++++++++++++++++-------- src/loom/std/mod.rs | 5 ++++- 2 files changed, 27 insertions(+), 9 deletions(-) (limited to 'src/loom') diff --git a/src/loom/std/atomic_u64.rs b/src/loom/std/atomic_u64.rs index 206954f..a86a195 100644 --- a/src/loom/std/atomic_u64.rs +++ b/src/loom/std/atomic_u64.rs @@ -24,8 +24,8 @@ mod imp { } impl AtomicU64 { - pub(crate) fn new(val: u64) -> AtomicU64 { - AtomicU64 { + pub(crate) fn new(val: u64) -> Self { + Self { inner: Mutex::new(val), } } @@ -45,16 +45,31 @@ mod imp { prev } - pub(crate) fn compare_and_swap(&self, old: u64, new: u64, _: Ordering) -> u64 { + pub(crate) fn compare_exchange( + &self, + current: u64, + new: u64, + _success: Ordering, + _failure: Ordering, + ) -> Result { let mut lock = self.inner.lock().unwrap(); - let prev = *lock; - if prev != old { - return prev; + if *lock == current { + *lock = new; + Ok(current) + } else { + Err(*lock) } + } - *lock = new; - prev + pub(crate) fn compare_exchange_weak( + &self, + current: u64, + new: u64, + success: Ordering, + failure: Ordering, + ) -> Result { + self.compare_exchange(current, new, success, failure) } } } diff --git a/src/loom/std/mod.rs b/src/loom/std/mod.rs index c3f74ef..b29cbee 100644 --- a/src/loom/std/mod.rs +++ b/src/loom/std/mod.rs @@ -74,7 +74,10 @@ pub(crate) mod sync { pub(crate) use crate::loom::std::atomic_u8::AtomicU8; pub(crate) use crate::loom::std::atomic_usize::AtomicUsize; - pub(crate) use std::sync::atomic::{fence, spin_loop_hint, AtomicBool, Ordering}; + pub(crate) use std::sync::atomic::{fence, AtomicBool, Ordering}; + // TODO: once we bump MSRV to 1.49+, use `hint::spin_loop` instead. + #[allow(deprecated)] + pub(crate) use std::sync::atomic::spin_loop_hint; } } -- cgit v1.2.3