Directly use raw pointers in AtomicPtr store/load
This commit is contained in:
parent
4ae328bef4
commit
aabe70f90e
2 changed files with 30 additions and 4 deletions
|
|
@ -966,8 +966,16 @@ impl<T> AtomicPtr<T> {
|
|||
#[inline]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn load(&self, order: Ordering) -> *mut T {
|
||||
#[cfg(not(bootstrap))]
|
||||
// SAFETY: data races are prevented by atomic intrinsics.
|
||||
unsafe { atomic_load(self.p.get() as *mut usize, order) as *mut T }
|
||||
unsafe {
|
||||
atomic_load(self.p.get(), order)
|
||||
}
|
||||
#[cfg(bootstrap)]
|
||||
// SAFETY: data races are prevented by atomic intrinsics.
|
||||
unsafe {
|
||||
atomic_load(self.p.get() as *mut usize, order) as *mut T
|
||||
}
|
||||
}
|
||||
|
||||
/// Stores a value into the pointer.
|
||||
|
|
@ -994,6 +1002,12 @@ impl<T> AtomicPtr<T> {
|
|||
#[inline]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn store(&self, ptr: *mut T, order: Ordering) {
|
||||
#[cfg(not(bootstrap))]
|
||||
// SAFETY: data races are prevented by atomic intrinsics.
|
||||
unsafe {
|
||||
atomic_store(self.p.get(), ptr, order);
|
||||
}
|
||||
#[cfg(bootstrap)]
|
||||
// SAFETY: data races are prevented by atomic intrinsics.
|
||||
unsafe {
|
||||
atomic_store(self.p.get() as *mut usize, ptr as usize, order);
|
||||
|
|
@ -1105,6 +1119,7 @@ impl<T> AtomicPtr<T> {
|
|||
success: Ordering,
|
||||
failure: Ordering,
|
||||
) -> Result<*mut T, *mut T> {
|
||||
#[cfg(bootstrap)]
|
||||
// SAFETY: data races are prevented by atomic intrinsics.
|
||||
unsafe {
|
||||
let res = atomic_compare_exchange(
|
||||
|
|
@ -1119,6 +1134,11 @@ impl<T> AtomicPtr<T> {
|
|||
Err(x) => Err(x as *mut T),
|
||||
}
|
||||
}
|
||||
#[cfg(not(bootstrap))]
|
||||
// SAFETY: data races are prevented by atomic intrinsics.
|
||||
unsafe {
|
||||
atomic_compare_exchange(self.p.get(), current, new, success, failure)
|
||||
}
|
||||
}
|
||||
|
||||
/// Stores a value into the pointer if the current value is the same as the `current` value.
|
||||
|
|
@ -1165,6 +1185,7 @@ impl<T> AtomicPtr<T> {
|
|||
success: Ordering,
|
||||
failure: Ordering,
|
||||
) -> Result<*mut T, *mut T> {
|
||||
#[cfg(bootstrap)]
|
||||
// SAFETY: data races are prevented by atomic intrinsics.
|
||||
unsafe {
|
||||
let res = atomic_compare_exchange_weak(
|
||||
|
|
@ -1179,6 +1200,11 @@ impl<T> AtomicPtr<T> {
|
|||
Err(x) => Err(x as *mut T),
|
||||
}
|
||||
}
|
||||
#[cfg(not(bootstrap))]
|
||||
// SAFETY: data races are prevented by atomic intrinsics.
|
||||
unsafe {
|
||||
atomic_compare_exchange_weak(self.p.get(), current, new, success, failure)
|
||||
}
|
||||
}
|
||||
|
||||
/// Fetches the value, and applies a function to it that returns an optional
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue