diff options
| author | bors <bors@rust-lang.org> | 2014-11-24 09:56:34 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-11-24 09:56:34 +0000 |
| commit | bad1062caaaefe0963d7b8513786c8283e74f1e7 (patch) | |
| tree | b5bfc64c2cfa18969ec671e85b9c6c0c7053226b /src/libstd/sync | |
| parent | f5b92b4b7a08290833e698ca374f3154e16e9714 (diff) | |
| parent | a9c1152c4bf72132806cb76045b3464d59db07da (diff) | |
| download | rust-bad1062caaaefe0963d7b8513786c8283e74f1e7.tar.gz rust-bad1062caaaefe0963d7b8513786c8283e74f1e7.zip | |
auto merge of #19094 : alexcrichton/rust/rm-std-local-data, r=aturon
This commit removes the `std::local_data` module in favor of a new `std::thread_local`
module providing thread local storage. The module provides two variants of TLS:
one which owns its contents and one which is based on scoped references. Each
implementation has pros and cons listed in the documentation.
Both flavors have accessors through a function called `with` which yield a
reference to a closure provided. Both flavors also panic if a reference cannot
be yielded and provide a function to test whether an access would panic or not.
This is an implementation of [RFC 461][rfc] and full details can be found in
that RFC.
This is a breaking change due to the removal of the `std::local_data` module.
All users can migrate to the new tls system like so:
thread_local!(static FOO: Rc<RefCell<Option<T>>> = Rc::new(RefCell::new(None)))
The old `local_data` module inherently contained the `Rc<RefCell<Option<T>>>` as
an implementation detail which must now be explicitly stated by users.
[rfc]: https://github.com/rust-lang/rfcs/pull/461
[breaking-change]
Diffstat (limited to 'src/libstd/sync')
| -rw-r--r-- | src/libstd/sync/future.rs | 24 |
1 files changed, 0 insertions, 24 deletions
diff --git a/src/libstd/sync/future.rs b/src/libstd/sync/future.rs index e37d1f83877..3e1ba8cebf8 100644 --- a/src/libstd/sync/future.rs +++ b/src/libstd/sync/future.rs @@ -210,28 +210,4 @@ mod test { }); assert_eq!(rx.recv(), expected); } - - #[test] - fn test_dropped_future_doesnt_panic() { - struct Bomb(Sender<bool>); - - local_data_key!(LOCAL: Bomb) - - impl Drop for Bomb { - fn drop(&mut self) { - let Bomb(ref tx) = *self; - tx.send(task::failing()); - } - } - - // Spawn a future, but drop it immediately. When we receive the result - // later on, we should never view the task as having panicked. - let (tx, rx) = channel(); - drop(Future::spawn(proc() { - LOCAL.replace(Some(Bomb(tx))); - })); - - // Make sure the future didn't panic the task. - assert!(!rx.recv()); - } } |
