diff --git a/crossbeam-epoch/src/internal.rs b/crossbeam-epoch/src/internal.rs index c93d64601..5c3d1e5ae 100644 --- a/crossbeam-epoch/src/internal.rs +++ b/crossbeam-epoch/src/internal.rs @@ -228,8 +228,13 @@ impl Global { /// `try_advance()` is annotated `#[cold]` because it is rarely called. #[cold] pub(crate) fn try_advance(&self, guard: &Guard) -> Epoch { - let global_epoch = self.epoch.load(Ordering::Relaxed); - atomic::fence(Ordering::SeqCst); + let global_epoch = if cfg!(crossbeam_sanitize_thread) { + self.epoch.load(Ordering::SeqCst) + } else { + let global_epoch = self.epoch.load(Ordering::Relaxed); + atomic::fence(Ordering::SeqCst); + global_epoch + }; // TODO(stjepang): `Local`s are stored in a linked list because linked lists are fairly // easy to implement in a lock-free manner. However, traversal can be slow due to cache