未验证 提交 904c6ca9 编写于 作者: M Matthias Krüger 提交者: GitHub

Rollup merge of #94236 - reez12g:add_track_caller_87707, r=yaahc

Add #[track_caller] to track callers when initializing poisoned Once

This PR is for this Issue.
https://github.com/rust-lang/rust/issues/87707

With this fix, we expect to be able to track the caller when poisoned Once is initialized.
......@@ -256,6 +256,7 @@ pub const fn new() -> 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(),
......@@ -390,6 +391,7 @@ pub fn is_completed(&self) -> bool {
// 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 {
......
// 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(|| {});
}
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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册