aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Alice Ryhl <aliceryhl@google.com> 2022-04-15 22:46:40 +0200
committerGravatar GitHub <noreply@github.com> 2022-04-15 22:46:40 +0200
commit547a32033ec60edc143da33c6c0fbde9d845e91a (patch)
treea537584d35b2c46fef9b463382c1ecc1d50590b2 /src
parent724476982b35f094b59d160ecc02c042082ac604 (diff)
downloadbytes-547a32033ec60edc143da33c6c0fbde9d845e91a.tar.gz
bytes-547a32033ec60edc143da33c6c0fbde9d845e91a.tar.zst
bytes-547a32033ec60edc143da33c6c0fbde9d845e91a.zip
Add TSAN support (#541)
Diffstat (limited to 'src')
-rw-r--r--src/bytes.rs7
-rw-r--r--src/bytes_mut.rs7
-rw-r--r--src/loom.rs4
3 files changed, 12 insertions, 6 deletions
diff --git a/src/bytes.rs b/src/bytes.rs
index 24c2137..1afab33 100644
--- a/src/bytes.rs
+++ b/src/bytes.rs
@@ -13,7 +13,7 @@ use alloc::{
use crate::buf::IntoIter;
#[allow(unused)]
use crate::loom::sync::atomic::AtomicMut;
-use crate::loom::sync::atomic::{self, AtomicPtr, AtomicUsize, Ordering};
+use crate::loom::sync::atomic::{AtomicPtr, AtomicUsize, Ordering};
use crate::Buf;
/// A cheaply cloneable and sliceable chunk of contiguous memory.
@@ -1095,7 +1095,10 @@ unsafe fn release_shared(ptr: *mut Shared) {
// > "acquire" operation before deleting the object.
//
// [1]: (www.boost.org/doc/libs/1_55_0/doc/html/atomic/usage_examples.html)
- atomic::fence(Ordering::Acquire);
+ //
+ // Thread sanitizer does not support atomic fences. Use an atomic load
+ // instead.
+ (*ptr).ref_cnt.load(Ordering::Acquire);
// Drop the data
Box::from_raw(ptr);
diff --git a/src/bytes_mut.rs b/src/bytes_mut.rs
index d13cf05..88d7f00 100644
--- a/src/bytes_mut.rs
+++ b/src/bytes_mut.rs
@@ -16,7 +16,7 @@ use crate::buf::{IntoIter, UninitSlice};
use crate::bytes::Vtable;
#[allow(unused)]
use crate::loom::sync::atomic::AtomicMut;
-use crate::loom::sync::atomic::{self, AtomicPtr, AtomicUsize, Ordering};
+use crate::loom::sync::atomic::{AtomicPtr, AtomicUsize, Ordering};
use crate::{Buf, BufMut, Bytes};
/// A unique reference to a contiguous slice of memory.
@@ -1288,7 +1288,10 @@ unsafe fn release_shared(ptr: *mut Shared) {
// > "acquire" operation before deleting the object.
//
// [1]: (www.boost.org/doc/libs/1_55_0/doc/html/atomic/usage_examples.html)
- atomic::fence(Ordering::Acquire);
+ //
+ // Thread sanitizer does not support atomic fences. Use an atomic load
+ // instead.
+ (*ptr).ref_count.load(Ordering::Acquire);
// Drop the data
Box::from_raw(ptr);
diff --git a/src/loom.rs b/src/loom.rs
index 1cae881..9e6b2d5 100644
--- a/src/loom.rs
+++ b/src/loom.rs
@@ -1,7 +1,7 @@
#[cfg(not(all(test, loom)))]
pub(crate) mod sync {
pub(crate) mod atomic {
- pub(crate) use core::sync::atomic::{fence, AtomicPtr, AtomicUsize, Ordering};
+ pub(crate) use core::sync::atomic::{AtomicPtr, AtomicUsize, Ordering};
pub(crate) trait AtomicMut<T> {
fn with_mut<F, R>(&mut self, f: F) -> R
@@ -23,7 +23,7 @@ pub(crate) mod sync {
#[cfg(all(test, loom))]
pub(crate) mod sync {
pub(crate) mod atomic {
- pub(crate) use loom::sync::atomic::{fence, AtomicPtr, AtomicUsize, Ordering};
+ pub(crate) use loom::sync::atomic::{AtomicPtr, AtomicUsize, Ordering};
pub(crate) trait AtomicMut<T> {}
}