From 84378b0b5af9ec09ce627fdd59353b408d7f7fb4 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 19 May 2014 17:33:40 -0700 Subject: std: Use Arc instead of UnsafeArc in BlockedTask --- src/libstd/rt/task.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'src/libstd/rt') diff --git a/src/libstd/rt/task.rs b/src/libstd/rt/task.rs index 31a20145306..8968747d990 100644 --- a/src/libstd/rt/task.rs +++ b/src/libstd/rt/task.rs @@ -13,6 +13,8 @@ //! local storage, and logging. Even a 'freestanding' Rust would likely want //! to implement this. +use alloc::arc::Arc; + use cleanup; use clone::Clone; use comm::Sender; @@ -32,7 +34,6 @@ use rt::local_heap::LocalHeap; use rt::rtio::LocalIo; use rt::unwind::Unwinder; use str::SendStr; -use sync::arc::UnsafeArc; use sync::atomics::{AtomicUint, SeqCst}; use task::{TaskResult, TaskOpts}; use unstable::finally::Finally; @@ -65,7 +66,7 @@ pub struct LocalStorage(pub Option); /// at any time. pub enum BlockedTask { Owned(Box), - Shared(UnsafeArc), + Shared(Arc), } pub enum DeathAction { @@ -82,7 +83,7 @@ pub struct Death { } pub struct BlockedTasks { - inner: UnsafeArc, + inner: Arc, } impl Task { @@ -313,10 +314,10 @@ impl BlockedTask { pub fn wake(self) -> Option> { match self { Owned(task) => Some(task), - Shared(arc) => unsafe { - match (*arc.get()).swap(0, SeqCst) { + Shared(arc) => { + match arc.swap(0, SeqCst) { 0 => None, - n => Some(mem::transmute(n)), + n => Some(unsafe { mem::transmute(n) }), } } } @@ -343,7 +344,7 @@ impl BlockedTask { let arc = match self { Owned(task) => { let flag = unsafe { AtomicUint::new(mem::transmute(task)) }; - UnsafeArc::new(flag) + Arc::new(flag) } Shared(arc) => arc.clone(), }; @@ -375,7 +376,7 @@ impl BlockedTask { if blocked_task_ptr & 0x1 == 0 { Owned(mem::transmute(blocked_task_ptr)) } else { - let ptr: Box> = + let ptr: Box> = mem::transmute(blocked_task_ptr & !1); Shared(*ptr) } -- cgit 1.4.1-3-g733a5