Skip to content

Commit 43b1e0c

Browse files
committed
remove FIXME in once_lock
A `poison::Once` is actually necessary for `OnceLock` since it needs the ability to propagate failure to other threads.
1 parent c2b84fb commit 43b1e0c

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

library/std/src/sync/once_lock.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,10 @@ use crate::sync::Once;
104104
/// ```
105105
#[stable(feature = "once_cell", since = "1.70.0")]
106106
pub struct OnceLock<T> {
107-
// FIXME(nonpoison_once): switch to nonpoison version once it is available
107+
/// We use `poison::Once` here to allow us to pseudo-"poison" the `Once` whenever a
108+
/// `get_or_try_init` fails, which allows other calls to be run after a failure.
108109
once: Once,
109-
// Whether or not the value is initialized is tracked by `once.is_completed()`.
110+
/// Note that `once.is_completed()` tells us if the value is initialized or not.
110111
value: UnsafeCell<MaybeUninit<T>>,
111112
/// `PhantomData` to make sure dropck understands we're dropping T in our Drop impl.
112113
///

0 commit comments

Comments
 (0)