Tighten TSAN runtime options and suppressions

- runtime-tsan-options.txt: halt_on_error=true so CI fails fast on the
  first unsuppressed report instead of only relying on the exit-code-66
  behavior at process end.
- tsan.supp: drop entries that were redundant with the boost/asio/ and
  boost/context/ path patterns (executor.hpp, boost::asio,
  fiber::resume, spawned_fiber_thread*), and remove over-broad ones:
  race:__tsan_memcpy (matches any race whose top frame is the memcpy
  interceptor), race:pipe (substring-matches any function containing
  'pipe'; narrowed to __pipe), called_from_lib:libclang_rt (GCC builds
  link libtsan, and it would blanket-suppress interceptor reports),
  signal:execute_native_thread_routine (matches every std::thread entry
  point), and the duplicate std::__cxx11::basic_stringbuf. Document
  that path-pattern suppressions match ANY frame in a report.
- workflow: add a lower-bound guard so BUILD_NPROC never drops below 1
  after the coverage decrement on small runners.
- docs/build/sanitizers.md: document the halt_on_error=true default and
  how to collect all reports locally.
This commit is contained in:
Pratik Mankawde
2026-07-27 10:35:22 +01:00
parent 9857842179
commit 5899912a76
4 changed files with 15 additions and 13 deletions

View File

@@ -312,6 +312,8 @@ jobs:
[ "$COVERAGE_ENABLED" = "true" ] && BUILD_NPROC=$((BUILD_NPROC - 2))
# Sanitizer builds are memory hungry; run the tests single-threaded
[ "$SANITIZERS_ON" = "true" ] && BUILD_NPROC=1
# Never drop below one job (small runners could go to 0 or negative above)
[ "$BUILD_NPROC" -ge 1 ] || BUILD_NPROC=1
# The resolver/preload workaround is only correct for the ASan build:
# a regular build doesn't hit the __dn_expand interceptor bug, and must