From 05bb4c4e1bea99295f93d9a2382f534d675daee0 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Thu, 29 Aug 2013 20:23:29 -0400 Subject: [PATCH] reduce the size of UnsafeArc from 2 words to 1 --- src/libstd/unstable/sync.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 { data: *mut ArcData, } @@ -221,8 +222,9 @@ impl Clone for UnsafeArc { impl Drop for UnsafeArc{ 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 = 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::>(), size_of::<*[int, ..10]>()); + } #[test] fn test_atomically() {