1 //===-- tsan_thread.cc ----------------------------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file is a part of ThreadSanitizer (TSan), a race detector.
11 //
12 //===----------------------------------------------------------------------===//
13 #include "tsan_test_util.h"
14 #include "gtest/gtest.h"
15
TEST(ThreadSanitizer,ThreadSync)16 TEST(ThreadSanitizer, ThreadSync) {
17 MainThread t0;
18 MemLoc l;
19 t0.Write1(l);
20 {
21 ScopedThread t1;
22 t1.Write1(l);
23 }
24 t0.Write1(l);
25 }
26
TEST(ThreadSanitizer,ThreadDetach1)27 TEST(ThreadSanitizer, ThreadDetach1) {
28 ScopedThread t1(true);
29 MemLoc l;
30 t1.Write1(l);
31 }
32
TEST(ThreadSanitizer,ThreadDetach2)33 TEST(ThreadSanitizer, ThreadDetach2) {
34 ScopedThread t1;
35 MemLoc l;
36 t1.Write1(l);
37 t1.Detach();
38 }
39
thread_alot_func(void * arg)40 static void *thread_alot_func(void *arg) {
41 (void)arg;
42 int usleep(unsigned);
43 usleep(50);
44 return 0;
45 }
46
TEST(DISABLED_SLOW_ThreadSanitizer,ThreadALot)47 TEST(DISABLED_SLOW_ThreadSanitizer, ThreadALot) {
48 const int kThreads = 70000;
49 const int kAlive = 1000;
50 pthread_t threads[kAlive] = {};
51 for (int i = 0; i < kThreads; i++) {
52 if (threads[i % kAlive])
53 pthread_join(threads[i % kAlive], 0);
54 pthread_create(&threads[i % kAlive], 0, thread_alot_func, 0);
55 }
56 for (int i = 0; i < kAlive; i++) {
57 pthread_join(threads[i], 0);
58 }
59 }
60