Skip to content

Suppress the documented Crossbeam queue-buffer race in ThreadSanitizer. - #11

Merged
samuel-williams-shopify merged 1 commit into
mainfrom
codex/scope-crossbeam-thread-sanitizer-suppression
Oct 5, 2026
Merged

samuel-williams-shopify merged 1 commit into
mainfrom
codex/scope-crossbeam-thread-sanitizer-suppression

Conversation

@samuel-williams-shopify

Copy link
Copy Markdown
Contributor

Load narrowly scoped ThreadSanitizer suppressions for Crossbeam's speculative queue-buffer reads and writes.

The ThreadSanitizer job on main reports a race between Worker::push and Stealer::steal_batch_and_pop. Crossbeam intentionally reads queue slots before atomic validation and discards speculative values when validation fails. Its volatile buffer accesses remain a known Rust memory-model limitation, discussed in Crossbeam #589.

Add .github/tsan-suppressions.txt, matching only crossbeam_deque::deque::Buffer::read and Buffer::write with generic type wildcards, and load it through TSAN_OPTIONS in the sanitizer job. Document the accepted limitation and the need to reassess the patterns when updating Crossbeam. Race detection remains enabled for reports outside the matched buffer accesses.

Because the change intentionally suppresses a sanitizer report, a temporary ThreadSanitizer probe checked both outcomes: matching buffer access reports are suppressed, and an unrelated race still produces a failing exit status. The Linux sanitizer job exercises the actual Rust executor with these patterns.

@samuel-williams-shopify
samuel-williams-shopify merged commit b925410 into main Oct 5, 2026
15 checks passed
@samuel-williams-shopify
samuel-williams-shopify deleted the codex/scope-crossbeam-thread-sanitizer-suppression branch October 5, 2026 12:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant