left_right/
sync.rs

1#[cfg(loom)]
2pub(crate) use loom::sync::atomic::{AtomicPtr, AtomicUsize, Ordering};
3#[cfg(loom)]
4pub(crate) use loom::sync::{Arc, Mutex, MutexGuard};
5#[cfg(loom)]
6pub(crate) fn fence(ord: Ordering) {
7    if let Ordering::Acquire = ord {
8    } else {
9        // FIXME: loom only supports acquire fences at the moment.
10        // https://github.com/tokio-rs/loom/issues/117
11        // let's at least not panic...
12        // this may generate some false positives (`SeqCst` is stronger than `Acquire`
13        // for example), and some false negatives (`Relaxed` is weaker than `Acquire`),
14        // but it's the best we can do for the time being.
15    }
16    loom::sync::atomic::fence(Ordering::Acquire)
17}
18
19#[cfg(not(loom))]
20pub(crate) use std::sync::atomic::{fence, AtomicPtr, AtomicUsize, Ordering};
21#[cfg(not(loom))]
22pub(crate) use std::sync::{Arc, Mutex, MutexGuard};