about summary refs log tree commit diff
path: root/src/libstd/rt
diff options
context:
space:
mode:
authorJason Toffaletti <jason@topsy.com>2013-10-04 01:25:55 -0700
committerBrian Anderson <banderson@mozilla.com>2013-10-25 18:27:45 -0700
commitbf0e6eb346665d779ad012f7def9b4948c5c6b26 (patch)
tree47591cdd14d0f76397803f29314c26cbf4f67aed /src/libstd/rt
parentc62d604531456e96de506b835207223136361dc2 (diff)
downloadrust-bf0e6eb346665d779ad012f7def9b4948c5c6b26.tar.gz
rust-bf0e6eb346665d779ad012f7def9b4948c5c6b26.zip
add cache line padding
Diffstat (limited to 'src/libstd/rt')
-rw-r--r--src/libstd/rt/mpsc_queue.rs15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/libstd/rt/mpsc_queue.rs b/src/libstd/rt/mpsc_queue.rs
index 57b7d4f469b..09b148940f8 100644
--- a/src/libstd/rt/mpsc_queue.rs
+++ b/src/libstd/rt/mpsc_queue.rs
@@ -56,9 +56,13 @@ impl<T> Default for Node<T> {
 }
 
 struct State<T> {
-    stub: Node<T>,
+    pad0: [u8, ..64],
     head: AtomicPtr<Node<T>>,
+    pad1: [u8, ..64],
+    stub: Node<T>,
+    pad2: [u8, ..64],
     tail: *mut Node<T>,
+    pad3: [u8, ..64],
 }
 
 struct Queue<T> {
@@ -82,9 +86,13 @@ impl<T: Send> fmt::Default for Queue<T> {
 impl<T: Send> Queue<T> {
     pub fn new() -> Queue<T> {
         let mut q = Queue{state: UnsafeArc::new(State {
-            stub: Default::default(),
+            pad0: [0, ..64],
             head: AtomicPtr::new(mut_null()),
+            pad1: [0, ..64],
+            stub: Default::default(),
+            pad2: [0, ..64],
             tail: mut_null(),
+            pad3: [0, ..64],
         })};
         let stub = q.get_stub_unsafe();
         q.get_head().store(stub, Relaxed);
@@ -102,7 +110,7 @@ impl<T: Send> Queue<T> {
     fn push_node(&mut self, node: *mut Node<T>) {
         unsafe {
             (*node).next.store(mut_null(), Release);
-            let prev = (*self.state.get()).head.swap(node, Relaxed);
+            let prev = self.get_head().swap(node, Relaxed);
             (*prev).next.store(node, Release);
         }
     }
@@ -167,7 +175,6 @@ mod tests {
     use option::*;
     use task;
     use comm;
-    use fmt;
     use super::Queue;
 
     #[test]