[PATCH] D43548: Fix racy msan test
Maxim Kuvyrkov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 21 01:56:22 PST 2018
maxim-kuvyrkov created this revision.
Herald added subscribers: Sanitizers, llvm-commits.
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.
Repository:
rCRT Compiler Runtime
https://reviews.llvm.org/D43548
Files:
test/msan/pthread_getname_np.cc
Index: test/msan/pthread_getname_np.cc
===================================================================
--- test/msan/pthread_getname_np.cc
+++ test/msan/pthread_getname_np.cc
@@ -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 @@
assert(!res);
assert(strcmp(buf, kMyThreadName) == 0);
+ pthread_mutex_unlock (&lock);
+
res = pthread_join(t, 0);
assert(!res);
return 0;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43548.135204.patch
Type: text/x-patch
Size: 862 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180221/70402168/attachment.bin>
More information about the llvm-commits
mailing list