diff options
| author | bors <bors@rust-lang.org> | 2013-05-15 10:14:04 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-05-15 10:14:04 -0700 |
| commit | bcec83aaee0a44639a4b231834140dcb1d9adc7b (patch) | |
| tree | c9f967e7005a55a832f425053689f4d243754812 /src/libcore/task | |
| parent | d806c96ffb33acb35414a5743bca3c870d1f15c4 (diff) | |
| parent | 5af8646a8b6caf0bc71fb258225ba4f814152c1d (diff) | |
| download | rust-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.rs | 6 |
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); |
