diff options
| author | bors <bors@rust-lang.org> | 2014-05-10 23:21:44 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-05-10 23:21:44 -0700 |
| commit | adb8b0b230d5e5c79b4f873825b3d3cff8d1bc8f (patch) | |
| tree | 770b50ee78ec3b79feeaf70f73f50f1166bed980 /src/libsync | |
| parent | 11571cd9c1cde63c3b46ca65e608b84647785ac8 (diff) | |
| parent | 81fadbbc4182c5a34e0d2ff698471abfc1ec0e33 (diff) | |
| download | rust-adb8b0b230d5e5c79b4f873825b3d3cff8d1bc8f.tar.gz rust-adb8b0b230d5e5c79b4f873825b3d3cff8d1bc8f.zip | |
auto merge of #14006 : thestinger/rust/jemalloc, r=alexcrichton
Closes #11807
Diffstat (limited to 'src/libsync')
| -rw-r--r-- | src/libsync/arc.rs | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/libsync/arc.rs b/src/libsync/arc.rs index f5369ec862f..226eb7afb5f 100644 --- a/src/libsync/arc.rs +++ b/src/libsync/arc.rs @@ -15,8 +15,9 @@ use std::cast; use std::ptr; -use std::rt::global_heap; +use std::rt::heap::exchange_free; use std::sync::atomics; +use std::mem::{min_align_of, size_of}; /// An atomically reference counted wrapper for shared state. /// @@ -190,7 +191,8 @@ impl<T: Share + Send> Drop for Arc<T> { if self.inner().weak.fetch_sub(1, atomics::Release) == 1 { atomics::fence(atomics::Acquire); - unsafe { global_heap::exchange_free(self.x as *u8) } + unsafe { exchange_free(self.x as *mut u8, size_of::<ArcInner<T>>(), + min_align_of::<ArcInner<T>>()) } } } } @@ -240,7 +242,8 @@ impl<T: Share + Send> Drop for Weak<T> { // the memory orderings if self.inner().weak.fetch_sub(1, atomics::Release) == 1 { atomics::fence(atomics::Acquire); - unsafe { global_heap::exchange_free(self.x as *u8) } + unsafe { exchange_free(self.x as *mut u8, size_of::<ArcInner<T>>(), + min_align_of::<ArcInner<T>>()) } } } } |
