let map_ptr = rt::rust_get_task_local_data(task);
if map_ptr.is_null() {
let map: TaskLocalMap = @mut ~[];
- // Use reinterpret_cast -- transmute would take map away from us also.
- rt::rust_set_task_local_data(
- task, cast::transmute(map));
+ 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,
}
}
-unsafe fn key_to_key_value<T:Durable>(
- key: LocalDataKey<T>) -> *libc::c_void {
-
+unsafe fn key_to_key_value<T:Durable>(key: LocalDataKey<T>) -> *libc::c_void {
// Keys are closures, which are (fnptr,envptr) pairs. Use fnptr.
// Use reintepret_cast -- transmute would leak (forget) the closure.
- let pair: (*libc::c_void, *libc::c_void) = cast::transmute(key);
+ let pair: (*libc::c_void, *libc::c_void) = cast::transmute_copy(&key);
pair.first()
}