diff options
Diffstat (limited to 'test/msan/pthread_getname_np.cc')
-rw-r--r-- | test/msan/pthread_getname_np.cc | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/test/msan/pthread_getname_np.cc b/test/msan/pthread_getname_np.cc index ca27d8b6fd6c..e19b652a73c9 100644 --- a/test/msan/pthread_getname_np.cc +++ b/test/msan/pthread_getname_np.cc @@ -1,5 +1,7 @@ // RUN: %clangxx_msan -std=c++11 -O0 %s -o %t && %run %t -// UNSUPPORTED: android, netbsd +// The main goal is getting the pthread name back and +// FreeBSD based do not support this feature +// UNSUPPORTED: android, netbsd, freebsd // Regression test for a deadlock in pthread_getattr_np @@ -10,12 +12,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 +40,8 @@ int main(void) { assert(!res); assert(strcmp(buf, kMyThreadName) == 0); + pthread_mutex_unlock (&lock); + res = pthread_join(t, 0); assert(!res); return 0; |