about summary refs log tree commit diff
path: root/src/libcore/task
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-05-15 10:14:04 -0700
committerbors <bors@rust-lang.org>2013-05-15 10:14:04 -0700
commitbcec83aaee0a44639a4b231834140dcb1d9adc7b (patch)
treec9f967e7005a55a832f425053689f4d243754812 /src/libcore/task
parentd806c96ffb33acb35414a5743bca3c870d1f15c4 (diff)
parent5af8646a8b6caf0bc71fb258225ba4f814152c1d (diff)
downloadrust-bcec83aaee0a44639a4b231834140dcb1d9adc7b.tar.gz
rust-bcec83aaee0a44639a4b231834140dcb1d9adc7b.zip
auto merge of #6493 : brson/rust/tls, r=thestinger
Diffstat (limited to 'src/libcore/task')
-rw-r--r--src/libcore/task/local_data_priv.rs6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/libcore/task/local_data_priv.rs b/src/libcore/task/local_data_priv.rs
index a30db039f30..766815a5e90 100644
--- a/src/libcore/task/local_data_priv.rs
+++ b/src/libcore/task/local_data_priv.rs
@@ -94,12 +94,10 @@ unsafe fn get_task_local_map(task: *rust_task) -> TaskLocalMap {
     let map_ptr = rt::rust_get_task_local_data(task);
     if map_ptr.is_null() {
         let map: TaskLocalMap = @mut ~[];
+        // NB: This bumps the ref count before converting to an unsafe pointer,
+        // keeping the map alive until TLS is destroyed
         rt::rust_set_task_local_data(task, cast::transmute(map));
         rt::rust_task_local_data_atexit(task, cleanup_task_local_map_extern_cb);
-        // Also need to reference it an extra time to keep it for now.
-        let nonmut = cast::transmute::<TaskLocalMap,
-                                       @~[Option<TaskLocalElement>]>(map);
-        cast::bump_box_refcount(nonmut);
         map
     } else {
         let map = cast::transmute(map_ptr);