std: Second pass stabilization for thread_local
This commit performs a second pass over the `std::thread_local` module. Most of the functionality remains explicitly unstable, but the specific actions taken were: * `thread_local` is now stable * `thread_local!` is now stable * `thread_local::Key` is now stable * `thread_local::Key::with` is now stable * `thread_local::Key::destroyed` is deprecated in favor of a more general `state` function * `thread_local::Key::state` was added to query the three states that a key can be in: uninitialized, valid, or destroyed. This function, and the corresponding `State` enum, are both marked unstable as we may wish to expand it later on. * `thread_local::scoped` is entirely unstable. There hasn't been a whole lot of usage of this module in the standard distribution, so it remains unstable at this time. Note that while the structure `Key` is marked stable, it is currently forced to expose all of its implementation details due to the use of construction-via-macro. The use of construction-via-macro is currently required in order to place the `#[thread_local]` attribute on static in a platform-specific manner. These stability attributes were assigned assuming that it will be acceptable to tweak the implementation of `Key` in the future.
This commit is contained in:
parent
10d99a9734
commit
be11aa6d70
3 changed files with 145 additions and 44 deletions
|
|
@ -10,9 +10,10 @@
|
|||
|
||||
use core::prelude::*;
|
||||
|
||||
use thread::Thread;
|
||||
use cell::RefCell;
|
||||
use string::String;
|
||||
use thread::Thread;
|
||||
use thread_local::State;
|
||||
|
||||
struct ThreadInfo {
|
||||
// This field holds the known bounds of the stack in (lo, hi)
|
||||
|
|
@ -27,7 +28,7 @@ thread_local! { static THREAD_INFO: RefCell<Option<ThreadInfo>> = RefCell::new(N
|
|||
|
||||
impl ThreadInfo {
|
||||
fn with<R>(f: |&mut ThreadInfo| -> R) -> R {
|
||||
if THREAD_INFO.destroyed() {
|
||||
if THREAD_INFO.state() == State::Destroyed {
|
||||
panic!("Use of std::thread::Thread::current() is not possible after \
|
||||
the thread's local data has been destroyed");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue