[compiler-rt] r325703 - Fix racy msan test

Maxim Kuvyrkov via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 21 10:03:50 PST 2018


Author: maxim-kuvyrkov
Date: Wed Feb 21 10:03:50 2018
New Revision: 325703

URL: http://llvm.org/viewvc/llvm-project?rev=325703&view=rev
Log:
Fix racy msan test

Summary:
Child thread may finish before pthread_setname_np() and/or
pthread_getname_np() had a chance to run, which causes these functions
to fail with ENOENT (meaning /proc/self/task/[tid]/comm doesn't exist).

Fix by stalling child thread on a mutex.

Reviewers: eugenis

Reviewed By: eugenis

Subscribers: llvm-commits, #sanitizers

Differential Revision: https://reviews.llvm.org/D43548

Modified:
    compiler-rt/trunk/test/msan/pthread_getname_np.cc

Modified: compiler-rt/trunk/test/msan/pthread_getname_np.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/msan/pthread_getname_np.cc?rev=325703&r1=325702&r2=325703&view=diff
==============================================================================
--- compiler-rt/trunk/test/msan/pthread_getname_np.cc (original)
+++ compiler-rt/trunk/test/msan/pthread_getname_np.cc Wed Feb 21 10:03:50 2018
@@ -10,12 +10,22 @@
 
 #include <stdio.h>
 
+// Stall child thread on this lock to make sure it doesn't finish
+// before the end of the pthread_getname_np() / pthread_setname_np() tests.
+static pthread_mutex_t lock;
+
 void *ThreadFn(void *) {
+  pthread_mutex_lock (&lock);
+  pthread_mutex_unlock (&lock);
   return nullptr;
 }
 
 int main(void) {
   pthread_t t;
+
+  pthread_mutex_init (&lock, NULL);
+  pthread_mutex_lock (&lock);
+
   int res = pthread_create(&t, 0, ThreadFn, 0);
   assert(!res);
 
@@ -28,6 +38,8 @@ int main(void) {
   assert(!res);
   assert(strcmp(buf, kMyThreadName) == 0);
 
+  pthread_mutex_unlock (&lock);
+
   res = pthread_join(t, 0);
   assert(!res);
   return 0;




More information about the llvm-commits mailing list