diff options
| -rw-r--r-- | src/libstd/sync/arc.rs | 12 | ||||
| -rw-r--r-- | src/libstd/ty.rs | 1 |
2 files changed, 8 insertions, 5 deletions
diff --git a/src/libstd/sync/arc.rs b/src/libstd/sync/arc.rs index 883e81355e1..92974005305 100644 --- a/src/libstd/sync/arc.rs +++ b/src/libstd/sync/arc.rs @@ -28,6 +28,7 @@ use ops::Drop; use ptr::RawPtr; use sync::atomics::{fence, AtomicUint, Relaxed, Acquire, Release}; use slice; +use ty::Unsafe; /// An atomically reference counted pointer. /// @@ -39,11 +40,14 @@ pub struct UnsafeArc<T> { struct ArcData<T> { count: AtomicUint, - data: T, + data: Unsafe<T>, } unsafe fn new_inner<T: Send>(data: T, refcount: uint) -> *mut ArcData<T> { - let data = ~ArcData { count: AtomicUint::new(refcount), data: data }; + let data = ~ArcData { + count: AtomicUint::new(refcount), + data: Unsafe::new(data) + }; cast::transmute(data) } @@ -82,7 +86,7 @@ impl<T: Send> UnsafeArc<T> { unsafe { // FIXME(#12049): this needs some sort of debug assertion if cfg!(test) { assert!((*self.data).count.load(Relaxed) > 0); } - return &mut (*self.data).data as *mut T; + return (*self.data).data.get(); } } @@ -93,7 +97,7 @@ impl<T: Send> UnsafeArc<T> { unsafe { // FIXME(#12049): this needs some sort of debug assertion if cfg!(test) { assert!((*self.data).count.load(Relaxed) > 0); } - return &(*self.data).data as *T; + return (*self.data).data.get() as *T; } } diff --git a/src/libstd/ty.rs b/src/libstd/ty.rs index f06ccad7a28..344235053f3 100644 --- a/src/libstd/ty.rs +++ b/src/libstd/ty.rs @@ -65,7 +65,6 @@ pub struct Unsafe<T> { marker1: marker::InvariantType<T> } - impl<T> Unsafe<T> { /// Static constructor |
