diff options
| author | Alexander Potapenko <glider@google.com> | 2014-02-06 14:06:12 +0000 |
|---|---|---|
| committer | Alexander Potapenko <glider@google.com> | 2014-02-06 14:06:12 +0000 |
| commit | 1a0aadcd775ee467bd9d39f7ba42ac3849f60a59 (patch) | |
| tree | 12317dc91c23d237879f8ab1baca2605e66cda13 /compiler-rt/lib | |
| parent | a1193a50b0b6a7f072e2c8bc4d6cbf1dde9ec0c3 (diff) | |
| download | bcm5719-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.cc | 28 |
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. +} |

