diff options
| author | bors <bors@rust-lang.org> | 2017-07-13 10:50:23 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-07-13 10:50:23 +0000 |
| commit | b2c0707872082c890f332178f59fd02eea5b98f3 (patch) | |
| tree | e6c9eaa93dfbb471c9aaa96965d6265c1a3965de /src/libstd/sys_common | |
| parent | 06ffdeb7816ae62175febdfa18534290bf5ad573 (diff) | |
| parent | a301f84b6afc30c58dede5ddd804890f7a6f20a5 (diff) | |
| download | rust-b2c0707872082c890f332178f59fd02eea5b98f3.tar.gz rust-b2c0707872082c890f332178f59fd02eea5b98f3.zip | |
Auto merge of #43158 - PlasmaPower:thread-local-try-with, r=alexcrichton
Thread local try with https://github.com/rust-lang/rfcs/pull/2030 was turned into this PR (the RFC was closed, but it looks like just a PR should be good). See also: state stabilization issue: #27716 `try_with` is used in two places in std: stdio and thread_info. In stdio, it would be better if the result was passed to the closure, but in thread_info, it's better as is where the result is returned from the function call. I'm not sure which is better, but I prefer the current way as it better represents the scope.
Diffstat (limited to 'src/libstd/sys_common')
| -rw-r--r-- | src/libstd/sys_common/thread_info.rs | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/src/libstd/sys_common/thread_info.rs b/src/libstd/sys_common/thread_info.rs index 5ed48ee4558..2abb8afa828 100644 --- a/src/libstd/sys_common/thread_info.rs +++ b/src/libstd/sys_common/thread_info.rs @@ -12,7 +12,6 @@ use cell::RefCell; use thread::Thread; -use thread::LocalKeyState; struct ThreadInfo { stack_guard: Option<usize>, @@ -23,19 +22,15 @@ thread_local! { static THREAD_INFO: RefCell<Option<ThreadInfo>> = RefCell::new(N impl ThreadInfo { fn with<R, F>(f: F) -> Option<R> where F: FnOnce(&mut ThreadInfo) -> R { - if THREAD_INFO.state() == LocalKeyState::Destroyed { - return None - } - - THREAD_INFO.with(move |c| { + THREAD_INFO.try_with(move |c| { if c.borrow().is_none() { *c.borrow_mut() = Some(ThreadInfo { stack_guard: None, thread: Thread::new(None), }) } - Some(f(c.borrow_mut().as_mut().unwrap())) - }) + f(c.borrow_mut().as_mut().unwrap()) + }).ok() } } |
