diff options
author | Haibo Huang <hhb@google.com> | 2021-02-09 18:18:56 -0800 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2021-03-03 21:34:52 +0000 |
commit | e3d8d80d2d8744ccdcd175323e0864c8f30fcedc (patch) | |
tree | 16d053e70d21e456d52f4a7762ee41441342b7a2 /src/loom | |
parent | 925d648e545e70d6a4faae3d7efe5e0de885f922 (diff) | |
download | tokio-e3d8d80d2d8744ccdcd175323e0864c8f30fcedc.tar.gz |
Upgrade rust/crates/tokio to 1.2.0
Test: make
Change-Id: Ib0f6a5201b51e9d122b6e867388a3856e16f803a
Diffstat (limited to 'src/loom')
-rw-r--r-- | src/loom/std/atomic_u64.rs | 31 | ||||
-rw-r--r-- | src/loom/std/mod.rs | 5 |
2 files changed, 27 insertions, 9 deletions
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<u64, u64> { 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<u64, u64> { + 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; } } |