On 04/26/2017 12:05 PM, Martin Liška wrote: > Received as HTML from Kelvin: > > I have reviewed some of the implementation details for pthread_mutex_init and > pthread_mutex_lock, and have confirmed that ppc64 does use memset to > initialize the entirety of its mutex lock structure before potentially > overwriting a few of its fields with non-zero data. So in this regard, your > fix seems appropriate. > > However, I'm confused about how this program runs. My understanding of the > test case code is that the use of barrier_wait() calls is supposed to force > Thread1 to run "to completion" before Thread2 even starts. So if my > understanding is correct, it is not sensible for Thread1's pthread_mutex_init > call to be followed "immediately" by Thread2's pthread_mutex_lock() call. > > The comment in tsan_barrier.h describes barrier_init and barrier_wait as > "TSAN-invisible barriers". Can you help me understand how TSAN works in this > regard? I was expecting that TSAN runs the program with instrumentation on > the TSAN-visible "thread services" but no instrumentation on the > TSAN-invisible thread services. Is this understanding correct? > > The questions I am trying to answer for myself are whether this test, as > crafted, is really sufficiently "portable" and "meaningful". It seems to be > making non-portable assumptions about the implementation of > pthread_mutex_init and pthread_mutex_lock and pthread_mutex_unlock, even with > the proposed change. > > Just to clarify: > Is it your understanding that the expected tsan diagnostic report is > complaining that some data field of the mutex structure is being read in > Thread 2 after having been written in Thread 1 without any "happens before" > relationship (since tsan cannot see the barrier_wait calls?) Since the > "conflict" is going all the way back to Thread 1's pthread_mutex_init call, > am I correct in my understanding that the "first conflict noticed" is dealing > with some part of the lock structure that is not normally modified by the > execution of pthread_mutex_lock and pthread_mutex_unlock. > > Maybe adding a comment or two to the test case to clarify what is being > tested would be most helpful here... >
Well, I'm not the author neither of original test-case or modifications that added tsan_barrier.h. I'm CCing Bernd that can hopefully answer your questions. Martin