aboutsummaryrefslogtreecommitdiff
path: root/src/loom
diff options
context:
space:
mode:
authorHaibo Huang <hhb@google.com>2021-02-09 18:18:56 -0800
committerStephen Hines <srhines@google.com>2021-03-03 21:34:52 +0000
commite3d8d80d2d8744ccdcd175323e0864c8f30fcedc (patch)
tree16d053e70d21e456d52f4a7762ee41441342b7a2 /src/loom
parent925d648e545e70d6a4faae3d7efe5e0de885f922 (diff)
downloadtokio-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.rs31
-rw-r--r--src/loom/std/mod.rs5
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;
}
}