diff options
| author | bors <bors@rust-lang.org> | 2013-08-30 05:45:45 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-08-30 05:45:45 -0700 |
| commit | 0ac3e023d86fa84ed38bca3d34003b494fd28acf (patch) | |
| tree | 351601436d5ef5c9c26429e7a26f3fd44f8ebd2f /src/libstd | |
| parent | 1f9bd62fd6d63689b2d4bb4338625addf0e09bdd (diff) | |
| parent | 05bb4c4e1bea99295f93d9a2382f534d675daee0 (diff) | |
| download | rust-0ac3e023d86fa84ed38bca3d34003b494fd28acf.tar.gz rust-0ac3e023d86fa84ed38bca3d34003b494fd28acf.zip | |
auto merge of #8867 : thestinger/rust/smaller-arc, r=alexcrichton
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/unstable/sync.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/libstd/unstable/sync.rs b/src/libstd/unstable/sync.rs index 8d1545ea2b4..26313323291 100644 --- a/src/libstd/unstable/sync.rs +++ b/src/libstd/unstable/sync.rs @@ -26,6 +26,7 @@ use vec; /// An atomically reference counted pointer. /// /// Enforces no shared-memory safety. +#[unsafe_no_drop_flag] pub struct UnsafeArc<T> { data: *mut ArcData<T>, } @@ -221,8 +222,9 @@ impl<T: Send> Clone for UnsafeArc<T> { impl<T> Drop for UnsafeArc<T>{ fn drop(&self) { unsafe { + // Happens when destructing an unwrapper's handle and from `#[unsafe_no_drop_flag]` if self.data.is_null() { - return; // Happens when destructing an unwrapper's handle. + return } let mut data: ~ArcData<T> = cast::transmute(self.data); // Must be acquire+release, not just release, to make sure this @@ -440,6 +442,12 @@ mod tests { use super::{Exclusive, UnsafeArc, atomically}; use task; use util; + use sys::size_of; + + #[test] + fn test_size() { + assert_eq!(size_of::<UnsafeArc<[int, ..10]>>(), size_of::<*[int, ..10]>()); + } #[test] fn test_atomically() { |
