9a086b7d69b70cf3a77142dcdc9d61315b11c3a6
The completion check was scheduling-dependent and the test could lose its TSan overlap window. The producer now signals done with a release store, the consumer reads in a do/while keyed on that flag so at least one read is guaranteed by construction, and a started/reading handshake makes the producer's remaining pushes provably overlap the reader's loop. Bounded to 4096 pushes on the 256-slot ring, and the assertions moved after join() so a failure reports instead of terminating. With the pre-fix ring restored, four TSan runs still flag push vs copy_from, so the case keeps its teeth.
Languages
C++
95.7%
CMake
2.4%
Python
1.7%
Shell
0.2%