std: Don't assume thread::current() works on panic

Inspecting the current thread's info may not always work due to the TLS value
having been destroyed (or is actively being destroyed). The code for printing
a panic message assumed, however, that it could acquire the thread's name
through this method.

Instead this commit propagates the `Option` outwards to allow the
`std::panicking` module to handle the case where the current thread isn't
present.

While it solves the immediate issue of #24313, there is still another underlying
issue of panicking destructors in thread locals will abort the process.

Closes #24313
This commit is contained in:
Alex Crichton
2015-04-15 12:27:05 -07:00
parent 0e154aaad6
commit d98ab4faf8
5 changed files with 51 additions and 11 deletions

View File

@@ -81,7 +81,7 @@ mod imp {
// We're calling into functions with stack checks
stack::record_sp_limit(0);
let guard = thread_info::stack_guard();
let guard = thread_info::stack_guard().unwrap_or(0);
let addr = (*info).si_addr as usize;
if guard == 0 || addr < guard - PAGE_SIZE || addr >= guard {