about summary refs log tree commit diff
path: root/src/libsync
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-05-10 23:21:44 -0700
committerbors <bors@rust-lang.org>2014-05-10 23:21:44 -0700
commitadb8b0b230d5e5c79b4f873825b3d3cff8d1bc8f (patch)
tree770b50ee78ec3b79feeaf70f73f50f1166bed980 /src/libsync
parent11571cd9c1cde63c3b46ca65e608b84647785ac8 (diff)
parent81fadbbc4182c5a34e0d2ff698471abfc1ec0e33 (diff)
downloadrust-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.rs9
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>>()) }
         }
     }
 }