Skip to content

Commit

Permalink
Add #[track_caller] to track callers when initializing poisoned Once
Browse files Browse the repository at this point in the history
  • Loading branch information
reez12g authored and Mark-Simulacrum committed Mar 4, 2022
1 parent 6d76841 commit bca67fe
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 0 deletions.
2 changes: 2 additions & 0 deletions library/std/src/sync/once.rs
Expand Up @@ -256,6 +256,7 @@ impl Once {
///
/// [poison]: struct.Mutex.html#poisoning
#[stable(feature = "rust1", since = "1.0.0")]
#[track_caller]
pub fn call_once<F>(&self, f: F)
where
F: FnOnce(),
Expand Down Expand Up @@ -390,6 +391,7 @@ impl Once {
// currently no way to take an `FnOnce` and call it via virtual dispatch
// without some allocation overhead.
#[cold]
#[track_caller]
fn call_inner(&self, ignore_poisoning: bool, init: &mut dyn FnMut(&OnceState)) {
let mut state_and_queue = self.state_and_queue.load(Ordering::Acquire);
loop {
Expand Down
15 changes: 15 additions & 0 deletions src/test/ui/issues/issue-87707.rs
@@ -0,0 +1,15 @@
// test for #87707
// edition:2018
// run-fail
// check-run-results

use std::sync::Once;
use std::panic;

fn main() {
let o = Once::new();
let _ = panic::catch_unwind(|| {
o.call_once(|| panic!("Here Once instance is poisoned."));
});
o.call_once(|| {});
}
3 changes: 3 additions & 0 deletions src/test/ui/issues/issue-87707.run.stderr
@@ -0,0 +1,3 @@
thread 'main' panicked at 'Here Once instance is poisoned.', $DIR/issue-87707.rs:12:24
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread 'main' panicked at 'Once instance has previously been poisoned', $DIR/issue-87707.rs:14:7

0 comments on commit bca67fe

Please sign in to comment.