aboutsummaryrefslogtreecommitdiff
path: root/test/msan/pthread_getname_np.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test/msan/pthread_getname_np.cc')
-rw-r--r--test/msan/pthread_getname_np.cc16
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;