summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib
diff options
context:
space:
mode:
authorAlexander Potapenko <glider@google.com>2014-02-06 14:06:12 +0000
committerAlexander Potapenko <glider@google.com>2014-02-06 14:06:12 +0000
commit1a0aadcd775ee467bd9d39f7ba42ac3849f60a59 (patch)
tree12317dc91c23d237879f8ab1baca2605e66cda13 /compiler-rt/lib
parenta1193a50b0b6a7f072e2c8bc4d6cbf1dde9ec0c3 (diff)
downloadbcm5719-llvm-1a0aadcd775ee467bd9d39f7ba42ac3849f60a59.tar.gz
bcm5719-llvm-1a0aadcd775ee467bd9d39f7ba42ac3849f60a59.zip
[TSan] Add a regression test for https://code.google.com/p/thread-sanitizer/issues/detail?id=47
llvm-svn: 200923
Diffstat (limited to 'compiler-rt/lib')
-rw-r--r--compiler-rt/lib/tsan/lit_tests/getline_nohang.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/compiler-rt/lib/tsan/lit_tests/getline_nohang.cc b/compiler-rt/lib/tsan/lit_tests/getline_nohang.cc
new file mode 100644
index 00000000000..d5acb343a39
--- /dev/null
+++ b/compiler-rt/lib/tsan/lit_tests/getline_nohang.cc
@@ -0,0 +1,28 @@
+// RUN: %clangxx_tsan -O1 %s -o %t && TSAN_OPTIONS=report_thread_leaks=0 %t
+
+// Make sure TSan doesn't deadlock on a file stream lock at program shutdown.
+// See https://code.google.com/p/thread-sanitizer/issues/detail?id=47
+#include <pthread.h>
+#include <stdio.h>
+#include <unistd.h>
+
+void *thread(void *unused) {
+ char *line = NULL;
+ size_t size;
+ int fd[2];
+ pipe(fd);
+ // Forge a non-standard stream to make sure it's not closed.
+ FILE *stream = fdopen(fd[0], "r");
+ while (1) {
+ volatile int res = getline(&line, &size, stream);
+ (void)res;
+ }
+ return NULL;
+}
+
+int main() {
+ pthread_t t;
+ pthread_create(&t, NULL, thread, NULL);
+ return 0;
+ // ThreadSanitizer used to hang here because of a deadlock on a file stream.
+}
OpenPOWER on IntegriCloud