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:
Josh Stone
2026-04-21 10:41:56 -07:00
parent 66da6cae1a
commit 29ccf67f77
+1 -1
View File
@@ -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
}