mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-26 13:01:27 +03:00
rustc_thread_pool: Make CoreLatch::set use SeqCst instead of AcqRel
Every other modification of this variable uses `SeqCst`, which is justified in the sleep README. This particular choice of `AcqRel` was not discussed during its addition in rayon-rs/rayon#746, nor rayon-rs/rfcs#5, so I suspect was simply an oversight from earlier development. We probably do want this to participate in the same sequential consistency. The only other ordering difference is `CoreLatch::probe`'s load with `Acquire`, which should be fine because this doesn't need consistency with the sleep counters. See also rayon-rs/rayon#1297. As I commented there, I think in practice this would be quite rare to cause any problems, but it *could* be a source of non-deterministic bugs on targets with weak memory ordering.
This commit is contained in:
@@ -117,7 +117,7 @@ pub(super) fn wake_up(&self) {
|
||||
/// latch code.
|
||||
#[inline]
|
||||
unsafe fn set(this: *const Self) -> bool {
|
||||
let old_state = unsafe { (*this).state.swap(SET, Ordering::AcqRel) };
|
||||
let old_state = unsafe { (*this).state.swap(SET, Ordering::SeqCst) };
|
||||
old_state == SLEEPING
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user