diff options
| author | Flavio Percoco <flaper87@gmail.com> | 2014-03-11 22:24:25 +0100 |
|---|---|---|
| committer | Flavio Percoco <flaper87@gmail.com> | 2014-03-20 10:17:28 +0100 |
| commit | 8767c693390c0ad53ce96bf1d00548e1205be01b (patch) | |
| tree | c9ad8fd0aebddbfa6f0c73e9d32b967783bb83b9 | |
| parent | 3848021faedff3b99ad03fca320a1388e71e5039 (diff) | |
| download | rust-8767c693390c0ad53ce96bf1d00548e1205be01b.tar.gz rust-8767c693390c0ad53ce96bf1d00548e1205be01b.zip | |
Let ArcData use Unsafe<T>
| -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 |
