From 0654e10d0078955d6917db504ee5947846d4f952 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Thu, 15 Aug 2019 15:04:07 -0400 Subject: Remove `Sync` marker for Reader/Writer. These are not sync, as they can only be used from one thread at a time. Also add a `Send` trait for `RingBuffer`, as long as its element type is also `Send`. --- Cargo.toml | 2 +- Changelog.org | 7 ++++++- src/lib.rs | 3 +-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 28e5c6b..bebb670 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "starb" description = "STAtic Ring Buffers." -version = "0.2.0" +version = "0.3.0" authors = ["Brian Cully "] edition = "2018" license = "LGPL-3.0-or-later" diff --git a/Changelog.org b/Changelog.org index 93327cc..74c731f 100644 --- a/Changelog.org +++ b/Changelog.org @@ -1,5 +1,10 @@ -* Since 0.1 +* Since 0.2 + - API CHANGE: The `Reader` and `Writer` types were inadvertently + marked `Sync` when they are not. While you may read and write from + separate threads safely, it is neither safe to read from two + threads or more threads nor write from two or more threads. +* Since 0.1 - API CHANGE: `RingBuffer::new()` no longer takes an argument. - `Copy` trait is no longer required on most `RingBuffer` methods. - Added two methods for bulk copying data in/out of the ring buffer: diff --git a/src/lib.rs b/src/lib.rs index 254d833..96a947b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -73,6 +73,7 @@ impl RingBuffer { (rbr, rbw) } } +unsafe impl Send for RingBuffer where T: Send {} /// Consumer of `RingBuffer`. pub struct Reader<'a, T> { @@ -80,7 +81,6 @@ pub struct Reader<'a, T> { _marker: PhantomData<&'a ()>, } unsafe impl Send for Reader<'_, T> where T: Send {} -unsafe impl Sync for Reader<'_, T> {} /// Producer for `Ringbuffer`. pub struct Writer<'a, T> { @@ -88,7 +88,6 @@ pub struct Writer<'a, T> { _marker: PhantomData<&'a ()>, } unsafe impl Send for Writer<'_, T> where T: Send {} -unsafe impl Sync for Writer<'_, T> {} impl Reader<'_, T> { /// The number of elements currently available for reading. -- cgit v1.2.3