From 8b5549defb629210a8ffc1af08b3209e084fbfd8 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Tue, 11 Jul 2017 11:04:19 -0400 Subject: Fix @alexcrichton comments --- src/libstd/io/stdio.rs | 22 ++++++++++++++-------- src/libstd/thread/mod.rs | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) (limited to 'src/libstd') diff --git a/src/libstd/io/stdio.rs b/src/libstd/io/stdio.rs index d71fa133454..fb489bf487b 100644 --- a/src/libstd/io/stdio.rs +++ b/src/libstd/io/stdio.rs @@ -17,7 +17,7 @@ use io::{self, Initializer, BufReader, LineWriter}; use sync::{Arc, Mutex, MutexGuard}; use sys::stdio; use sys_common::remutex::{ReentrantMutex, ReentrantMutexGuard}; -use thread::LocalKey; +use thread::{LocalKey, LocalKeyState}; /// Stdout used by print! and println! macros thread_local! { @@ -674,14 +674,20 @@ fn print_to(args: fmt::Arguments, local_s: &'static LocalKey>>>, global_s: fn() -> T, label: &str) where T: Write { - let result = local_s.try_with(|s| { - if let Ok(mut borrowed) = s.try_borrow_mut() { - if let Some(w) = borrowed.as_mut() { - return w.write_fmt(args); - } + let result = match local_s.state() { + LocalKeyState::Uninitialized | + LocalKeyState::Destroyed => global_s().write_fmt(args), + LocalKeyState::Valid => { + local_s.with(|s| { + if let Ok(mut borrowed) = s.try_borrow_mut() { + if let Some(w) = borrowed.as_mut() { + return w.write_fmt(args); + } + } + global_s().write_fmt(args) + }) } - global_s().write_fmt(args) - }).unwrap_or_else(|_| global_s().write_fmt(args)); + }; if let Err(e) = result { panic!("failed printing to {}: {}", label, e); } diff --git a/src/libstd/thread/mod.rs b/src/libstd/thread/mod.rs index f4fe52ca3b3..07a3a01ce86 100644 --- a/src/libstd/thread/mod.rs +++ b/src/libstd/thread/mod.rs @@ -159,7 +159,7 @@ use time::Duration; #[macro_use] mod local; #[stable(feature = "rust1", since = "1.0.0")] -pub use self::local::{LocalKey, LocalKeyState}; +pub use self::local::{LocalKey, LocalKeyState, AccessError}; // The types used by the thread_local! macro to access TLS keys. Note that there // are two types, the "OS" type and the "fast" type. The OS thread local key -- cgit 1.4.1-3-g733a5