std: Prevent print panics when using TLS
Currently if a print happens while a thread is being torn down it may cause a panic if the LOCAL_STDOUT TLS slot has been destroyed by that point. This adds a guard to check and prints to the process stdout if that's the case (as we do for if the slot is already borrowed). Closes #29488
This commit is contained in:
parent
1a2eaffb63
commit
8588654783
2 changed files with 56 additions and 8 deletions
30
src/test/run-pass/issue-29488.rs
Normal file
30
src/test/run-pass/issue-29488.rs
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use std::thread;
|
||||
|
||||
struct Foo;
|
||||
|
||||
impl Drop for Foo {
|
||||
fn drop(&mut self) {
|
||||
println!("test2");
|
||||
}
|
||||
}
|
||||
|
||||
thread_local!(static FOO: Foo = Foo);
|
||||
|
||||
fn main() {
|
||||
// Off the main thread due to #28129, be sure to initialize FOO first before
|
||||
// calling `println!`
|
||||
thread::spawn(|| {
|
||||
FOO.with(|_| {});
|
||||
println!("test1");
|
||||
}).join().unwrap();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue