@@ -612,9 +612,7 @@ impl Scheduler {
612
612
f : |& mut Scheduler , ~GreenTask |) -> ~GreenTask {
613
613
let f_opaque = ClosureConverter :: from_fn ( f) ;
614
614
615
- let current_task_dupe = unsafe {
616
- * cast:: transmute :: < & ~GreenTask , & uint > ( & current_task)
617
- } ;
615
+ let current_task_dupe = & * current_task as * GreenTask ;
618
616
619
617
// The current task is placed inside an enum with the cleanup
620
618
// function. This enum is then placed inside the scheduler.
@@ -633,13 +631,8 @@ impl Scheduler {
633
631
cast:: transmute_mut_region ( * next_task. sched . get_mut_ref ( ) ) ;
634
632
635
633
let current_task: & mut GreenTask = match sched. cleanup_job {
636
- Some ( CleanupJob { task : ref task, .. } ) => {
637
- let task_ptr: * ~GreenTask = task;
638
- cast:: transmute_mut_region ( * cast:: transmute_mut_unsafe ( task_ptr) )
639
- }
640
- None => {
641
- rtabort ! ( "no cleanup job" ) ;
642
- }
634
+ Some ( CleanupJob { task : ref mut task, .. } ) => & mut * * task,
635
+ None => rtabort ! ( "no cleanup job" )
643
636
} ;
644
637
645
638
let ( current_task_context, next_task_context) =
@@ -852,7 +845,7 @@ impl Scheduler {
852
845
853
846
// * Utility Functions
854
847
855
- pub fn sched_id ( & self ) -> uint { unsafe { cast :: transmute ( self ) } }
848
+ pub fn sched_id ( & self ) -> uint { self as * Scheduler as uint }
856
849
857
850
pub fn run_cleanup_job ( & mut self ) {
858
851
let cleanup_job = self . cleanup_job . take_unwrap ( ) ;
0 commit comments