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