From ffcd423e6765eb508d8ae7a305955428ddb7e573 Mon Sep 17 00:00:00 2001
From: Jorge Aparicio <jorge@japaric.io>
Date: Thu, 9 Nov 2017 16:54:30 +0100
Subject: [PATCH] fix the contention test

patch by @pftbest :heart:
---
 src/ring_buffer/mod.rs  | 4 ++++
 src/ring_buffer/spsc.rs | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/ring_buffer/mod.rs b/src/ring_buffer/mod.rs
index 52bbb04..0ae68a7 100644
--- a/src/ring_buffer/mod.rs
+++ b/src/ring_buffer/mod.rs
@@ -29,6 +29,10 @@ impl AtomicUsize {
         unsafe { &mut *self.v.get() }
     }
 
+    pub fn load_acquire(&self) -> usize {
+        unsafe { intrinsics::atomic_load_acq(self.v.get()) }
+    }
+
     pub fn load_relaxed(&self) -> usize {
         unsafe { intrinsics::atomic_load_relaxed(self.v.get()) }
     }
diff --git a/src/ring_buffer/spsc.rs b/src/ring_buffer/spsc.rs
index 488c07a..082aab7 100644
--- a/src/ring_buffer/spsc.rs
+++ b/src/ring_buffer/spsc.rs
@@ -45,7 +45,7 @@ where
         let n = rb.capacity() + 1;
         let buffer: &[T] = unsafe { rb.buffer.as_ref() };
 
-        let tail = rb.tail.load_relaxed();
+        let tail = rb.tail.load_acquire();
         let head = rb.head.load_relaxed();
         if head != tail {
             let item = unsafe { ptr::read(buffer.get_unchecked(head)) };
-- 
GitLab