Home | History | Annotate | Download | only in rtl_tests
      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 
     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 
     27 TEST(ThreadSanitizer, ThreadDetach1) {
     28   ScopedThread t1(true);
     29   MemLoc l;
     30   t1.Write1(l);
     31 }
     32 
     33 TEST(ThreadSanitizer, ThreadDetach2) {
     34   ScopedThread t1;
     35   MemLoc l;
     36   t1.Write1(l);
     37   t1.Detach();
     38 }
     39 
     40 static void *thread_alot_func(void *arg) {
     41   (void)arg;
     42   int usleep(unsigned);
     43   usleep(50);
     44   return 0;
     45 }
     46 
     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