Skip to content

Commit fd874cd

Browse files
committed
Auto merge of #26463 - sfackler:stdout-panic-fix, r=alexcrichton
If a local stderr is present but the normal stderr is missing, we still want to print. r? @alexcrichton
2 parents dedd430 + 8193133 commit fd874cd

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

src/libstd/panicking.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,12 @@ pub fn on_panic(obj: &(Any+Send), file: &'static str, line: u32) {
3131
None => "Box<Any>",
3232
}
3333
};
34-
let mut err = match Stderr::new() {
35-
Ok(err) => err,
36-
_ => return,
37-
};
34+
let mut err = Stderr::new().ok();
3835
let thread = thread_info::current_thread();
3936
let name = thread.as_ref().and_then(|t| t.name()).unwrap_or("<unnamed>");
4037
let prev = LOCAL_STDERR.with(|s| s.borrow_mut().take());
41-
match prev {
42-
Some(mut stderr) => {
38+
match (prev, err.as_mut()) {
39+
(Some(mut stderr), _) => {
4340
// FIXME: what to do when the thread printing panics?
4441
let _ = writeln!(stderr,
4542
"thread '{}' panicked at '{}', {}:{}\n",
@@ -52,18 +49,22 @@ pub fn on_panic(obj: &(Any+Send), file: &'static str, line: u32) {
5249
*slot.borrow_mut() = s.take();
5350
});
5451
}
55-
None => {
56-
let _ = writeln!(&mut err, "thread '{}' panicked at '{}', {}:{}",
52+
(None, Some(ref mut err)) => {
53+
let _ = writeln!(err, "thread '{}' panicked at '{}', {}:{}",
5754
name, msg, file, line);
5855
if backtrace::log_enabled() {
59-
let _ = backtrace::write(&mut err);
56+
let _ = backtrace::write(err);
6057
}
6158
}
59+
_ => {}
6260
}
6361

6462
// If this is a double panic, make sure that we printed a backtrace
6563
// for this panic.
66-
if unwind::panicking() && !backtrace::log_enabled() {
67-
let _ = backtrace::write(&mut err);
64+
match err {
65+
Some(ref mut err) if unwind::panicking() && !backtrace::log_enabled() => {
66+
let _ = backtrace::write(err);
67+
}
68+
_ => {}
6869
}
6970
}

0 commit comments

Comments
 (0)