[PATCH] Fix sporadic failure in g++.dg/tsan/aligned_vs_unaligned_race.C
Jakub Jelinek
jakub@redhat.com
Tue Jan 6 09:16:00 GMT 2015
On Tue, Jan 06, 2015 at 10:08:22AM +0100, Bernd Edlinger wrote:
> Hi Mike,
>
> after some hours of sleep I realized that your step function can do something very interesting,
> (which you already requested previously):
>
> That is: create a race condition that is _always_ at 100% missed by tsan:
>
> cat lib.c
> /* { dg-do compile } */
> /* { dg-options "-O2 -fno-sanitize=all" } */
> Â
> static volatile int serial = 0;
> Â
> void step (int i)
> {
> Â while (__atomic_load_n (&serial, __ATOMIC_ACQUIRE) != i - 1);
> Â __atomic_store_n (&serial, i, __ATOMIC_RELEASE);
> }
Such busy waiting is not very CPU time friendly in the testsuite, especially
if you have just a single HW thread.
If libtsan is not fixed not to be so racy, perhaps instead of all the sleeps
we could arrange (on x86_64-linux, which is the only target supporting tsan
right now) to make sure the thread runs on the same core/hw thread as the
initial thread using pthread_[gs]etaffinity_np/pthread_attr_setaffinity_np ?
Does tsan then always report the races when the threads can't run
concurrently?
Jakub
More information about the Gcc-patches
mailing list