weaken needlessly restrictive orderings on Arc::*_count
This commit is contained in:
parent
4b043faba3
commit
7e93032726
@ -25,7 +25,7 @@
|
|||||||
#[cfg(not(no_global_oom_handling))]
|
#[cfg(not(no_global_oom_handling))]
|
||||||
use core::slice::from_raw_parts_mut;
|
use core::slice::from_raw_parts_mut;
|
||||||
use core::sync::atomic;
|
use core::sync::atomic;
|
||||||
use core::sync::atomic::Ordering::{Acquire, Relaxed, Release, SeqCst};
|
use core::sync::atomic::Ordering::{Acquire, Relaxed, Release};
|
||||||
|
|
||||||
#[cfg(not(no_global_oom_handling))]
|
#[cfg(not(no_global_oom_handling))]
|
||||||
use crate::alloc::handle_alloc_error;
|
use crate::alloc::handle_alloc_error;
|
||||||
@ -970,7 +970,7 @@ pub fn downgrade(this: &Self) -> Weak<T> {
|
|||||||
#[must_use]
|
#[must_use]
|
||||||
#[stable(feature = "arc_counts", since = "1.15.0")]
|
#[stable(feature = "arc_counts", since = "1.15.0")]
|
||||||
pub fn weak_count(this: &Self) -> usize {
|
pub fn weak_count(this: &Self) -> usize {
|
||||||
let cnt = this.inner().weak.load(SeqCst);
|
let cnt = this.inner().weak.load(Acquire);
|
||||||
// If the weak count is currently locked, the value of the
|
// If the weak count is currently locked, the value of the
|
||||||
// count was 0 just before taking the lock.
|
// count was 0 just before taking the lock.
|
||||||
if cnt == usize::MAX { 0 } else { cnt - 1 }
|
if cnt == usize::MAX { 0 } else { cnt - 1 }
|
||||||
@ -1000,7 +1000,7 @@ pub fn weak_count(this: &Self) -> usize {
|
|||||||
#[must_use]
|
#[must_use]
|
||||||
#[stable(feature = "arc_counts", since = "1.15.0")]
|
#[stable(feature = "arc_counts", since = "1.15.0")]
|
||||||
pub fn strong_count(this: &Self) -> usize {
|
pub fn strong_count(this: &Self) -> usize {
|
||||||
this.inner().strong.load(SeqCst)
|
this.inner().strong.load(Acquire)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Increments the strong reference count on the `Arc<T>` associated with the
|
/// Increments the strong reference count on the `Arc<T>` associated with the
|
||||||
@ -1961,7 +1961,7 @@ pub fn upgrade(&self) -> Option<Arc<T>> {
|
|||||||
#[must_use]
|
#[must_use]
|
||||||
#[stable(feature = "weak_counts", since = "1.41.0")]
|
#[stable(feature = "weak_counts", since = "1.41.0")]
|
||||||
pub fn strong_count(&self) -> usize {
|
pub fn strong_count(&self) -> usize {
|
||||||
if let Some(inner) = self.inner() { inner.strong.load(SeqCst) } else { 0 }
|
if let Some(inner) = self.inner() { inner.strong.load(Acquire) } else { 0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Gets an approximation of the number of `Weak` pointers pointing to this
|
/// Gets an approximation of the number of `Weak` pointers pointing to this
|
||||||
@ -1980,8 +1980,8 @@ pub fn strong_count(&self) -> usize {
|
|||||||
pub fn weak_count(&self) -> usize {
|
pub fn weak_count(&self) -> usize {
|
||||||
self.inner()
|
self.inner()
|
||||||
.map(|inner| {
|
.map(|inner| {
|
||||||
let weak = inner.weak.load(SeqCst);
|
let weak = inner.weak.load(Acquire);
|
||||||
let strong = inner.strong.load(SeqCst);
|
let strong = inner.strong.load(Acquire);
|
||||||
if strong == 0 {
|
if strong == 0 {
|
||||||
0
|
0
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user