mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
Stabilize poison API of Once, rename poisoned()
This stabilizes: * `OnceState` * `OnceState::is_poisoned()` (previously named `poisoned()`) * `Once::call_once_force()` `poisoned()` was renamed because the new name is more clear as a few people agreed and nobody objected. Closes #33577
This commit is contained in:
parent
e708cbd91c
commit
f42e96149d
@ -125,7 +125,7 @@ unsafe impl Send for Once {}
|
|||||||
|
|
||||||
/// State yielded to [`Once::call_once_force()`]’s closure parameter. The state
|
/// State yielded to [`Once::call_once_force()`]’s closure parameter. The state
|
||||||
/// can be used to query the poison status of the [`Once`].
|
/// can be used to query the poison status of the [`Once`].
|
||||||
#[unstable(feature = "once_poison", issue = "33577")]
|
#[stable(feature = "once_poison", since = "1.51.0")]
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct OnceState {
|
pub struct OnceState {
|
||||||
poisoned: bool,
|
poisoned: bool,
|
||||||
@ -280,8 +280,6 @@ impl Once {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// #![feature(once_poison)]
|
|
||||||
///
|
|
||||||
/// use std::sync::Once;
|
/// use std::sync::Once;
|
||||||
/// use std::thread;
|
/// use std::thread;
|
||||||
///
|
///
|
||||||
@ -301,13 +299,13 @@ impl Once {
|
|||||||
///
|
///
|
||||||
/// // call_once_force will still run and reset the poisoned state
|
/// // call_once_force will still run and reset the poisoned state
|
||||||
/// INIT.call_once_force(|state| {
|
/// INIT.call_once_force(|state| {
|
||||||
/// assert!(state.poisoned());
|
/// assert!(state.is_poisoned());
|
||||||
/// });
|
/// });
|
||||||
///
|
///
|
||||||
/// // once any success happens, we stop propagating the poison
|
/// // once any success happens, we stop propagating the poison
|
||||||
/// INIT.call_once(|| {});
|
/// INIT.call_once(|| {});
|
||||||
/// ```
|
/// ```
|
||||||
#[unstable(feature = "once_poison", issue = "33577")]
|
#[stable(feature = "once_poison", since = "1.51.0")]
|
||||||
pub fn call_once_force<F>(&self, f: F)
|
pub fn call_once_force<F>(&self, f: F)
|
||||||
where
|
where
|
||||||
F: FnOnce(&OnceState),
|
F: FnOnce(&OnceState),
|
||||||
@ -526,8 +524,6 @@ impl OnceState {
|
|||||||
/// A poisoned [`Once`]:
|
/// A poisoned [`Once`]:
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// #![feature(once_poison)]
|
|
||||||
///
|
|
||||||
/// use std::sync::Once;
|
/// use std::sync::Once;
|
||||||
/// use std::thread;
|
/// use std::thread;
|
||||||
///
|
///
|
||||||
@ -540,24 +536,22 @@ impl OnceState {
|
|||||||
/// assert!(handle.join().is_err());
|
/// assert!(handle.join().is_err());
|
||||||
///
|
///
|
||||||
/// INIT.call_once_force(|state| {
|
/// INIT.call_once_force(|state| {
|
||||||
/// assert!(state.poisoned());
|
/// assert!(state.is_poisoned());
|
||||||
/// });
|
/// });
|
||||||
/// ```
|
/// ```
|
||||||
///
|
///
|
||||||
/// An unpoisoned [`Once`]:
|
/// An unpoisoned [`Once`]:
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// #![feature(once_poison)]
|
|
||||||
///
|
|
||||||
/// use std::sync::Once;
|
/// use std::sync::Once;
|
||||||
///
|
///
|
||||||
/// static INIT: Once = Once::new();
|
/// static INIT: Once = Once::new();
|
||||||
///
|
///
|
||||||
/// INIT.call_once_force(|state| {
|
/// INIT.call_once_force(|state| {
|
||||||
/// assert!(!state.poisoned());
|
/// assert!(!state.is_poisoned());
|
||||||
/// });
|
/// });
|
||||||
#[unstable(feature = "once_poison", issue = "33577")]
|
#[stable(feature = "once_poison", since = "1.51.0")]
|
||||||
pub fn poisoned(&self) -> bool {
|
pub fn is_poisoned(&self) -> bool {
|
||||||
self.poisoned
|
self.poisoned
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ fn poison_bad() {
|
|||||||
let mut called = false;
|
let mut called = false;
|
||||||
O.call_once_force(|p| {
|
O.call_once_force(|p| {
|
||||||
called = true;
|
called = true;
|
||||||
assert!(p.poisoned())
|
assert!(p.is_poisoned())
|
||||||
});
|
});
|
||||||
assert!(called);
|
assert!(called);
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ fn wait_for_force_to_finish() {
|
|||||||
let (tx2, rx2) = channel();
|
let (tx2, rx2) = channel();
|
||||||
let t1 = thread::spawn(move || {
|
let t1 = thread::spawn(move || {
|
||||||
O.call_once_force(|p| {
|
O.call_once_force(|p| {
|
||||||
assert!(p.poisoned());
|
assert!(p.is_poisoned());
|
||||||
tx1.send(()).unwrap();
|
tx1.send(()).unwrap();
|
||||||
rx2.recv().unwrap();
|
rx2.recv().unwrap();
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user