Add TSan stress suite for per-hotspot race detection
Five new scenarios under test/irmin-pack/test_tsan_stress/ target
mutable state hotspots that the existing multicore + QCheck-STM
tests do not exercise across domains:
- stress_mem_cache: races the global Hashtbl.t cache captured by
Irmin_mem.Read_only.v (irmin_mem.ml:44) and the KMap mutable in
the Read_only instance.
- stress_watch: races the listen_dir_hook ref in watch.ml:28-29.
- stress_ao_buf: races the unguarded Buffer.t in the rw_perm of
Append_only_file (append_only_file.ml).
- stress_dict: races the two unguarded Hashtbl.t caches plus
last_refill_offset in dict.ml.
- stress_fs_pool: races the shared Eio_pool instances in
irmin_fs_unix.ml (mkdir_pool, openfile_pool).
mem and watch produce clean TSan data-race warnings pointing at the
exact hotspot; ao, dict and fs cause memory corruption fast enough
that TSan fires via SEGV before it can write a detailed report —
the SEGV itself is the race signal.
The @tsan-stress dune alias runs each scenario in its own process
via `|| true` so that a race-induced crash in one does not suppress
the others. The tsan.yml workflow counts both "WARNING:
ThreadSanitizer" and "ERROR: ThreadSanitizer" as findings, and
includes the @tsan-stress build-dir reports in the uploaded
artifact.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
914276
-
-
Apr 24 09:03 +00:00