xref: /openbsd-src/gnu/llvm/compiler-rt/lib/tsan/tests/rtl/tsan_thread.cpp (revision 810390e339a5425391477d5d41c78d7cab2424ac)
13cab2bb3Spatrick //===-- tsan_thread.cpp ---------------------------------------------------===//
23cab2bb3Spatrick //
33cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
43cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information.
53cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
63cab2bb3Spatrick //
73cab2bb3Spatrick //===----------------------------------------------------------------------===//
83cab2bb3Spatrick //
93cab2bb3Spatrick // This file is a part of ThreadSanitizer (TSan), a race detector.
103cab2bb3Spatrick //
113cab2bb3Spatrick //===----------------------------------------------------------------------===//
123cab2bb3Spatrick #include "tsan_test_util.h"
133cab2bb3Spatrick #include "gtest/gtest.h"
143cab2bb3Spatrick 
TEST_F(ThreadSanitizer,ThreadSync)15*810390e3Srobert TEST_F(ThreadSanitizer, ThreadSync) {
163cab2bb3Spatrick   MainThread t0;
173cab2bb3Spatrick   MemLoc l;
183cab2bb3Spatrick   t0.Write1(l);
193cab2bb3Spatrick   {
203cab2bb3Spatrick     ScopedThread t1;
213cab2bb3Spatrick     t1.Write1(l);
223cab2bb3Spatrick   }
233cab2bb3Spatrick   t0.Write1(l);
243cab2bb3Spatrick }
253cab2bb3Spatrick 
TEST_F(ThreadSanitizer,ThreadDetach1)26*810390e3Srobert TEST_F(ThreadSanitizer, ThreadDetach1) {
273cab2bb3Spatrick   ScopedThread t1(true);
283cab2bb3Spatrick   MemLoc l;
293cab2bb3Spatrick   t1.Write1(l);
303cab2bb3Spatrick }
313cab2bb3Spatrick 
TEST_F(ThreadSanitizer,ThreadDetach2)32*810390e3Srobert TEST_F(ThreadSanitizer, ThreadDetach2) {
333cab2bb3Spatrick   ScopedThread t1;
343cab2bb3Spatrick   MemLoc l;
353cab2bb3Spatrick   t1.Write1(l);
363cab2bb3Spatrick   t1.Detach();
373cab2bb3Spatrick }
383cab2bb3Spatrick 
thread_alot_func(void * arg)393cab2bb3Spatrick static void *thread_alot_func(void *arg) {
403cab2bb3Spatrick   (void)arg;
413cab2bb3Spatrick   int usleep(unsigned);
423cab2bb3Spatrick   usleep(50);
433cab2bb3Spatrick   return 0;
443cab2bb3Spatrick }
453cab2bb3Spatrick 
TEST(DISABLED_SLOW_ThreadSanitizer,ThreadALot)463cab2bb3Spatrick TEST(DISABLED_SLOW_ThreadSanitizer, ThreadALot) {
473cab2bb3Spatrick   const int kThreads = 70000;
483cab2bb3Spatrick   const int kAlive = 1000;
493cab2bb3Spatrick   pthread_t threads[kAlive] = {};
503cab2bb3Spatrick   for (int i = 0; i < kThreads; i++) {
513cab2bb3Spatrick     if (threads[i % kAlive])
523cab2bb3Spatrick       pthread_join(threads[i % kAlive], 0);
533cab2bb3Spatrick     pthread_create(&threads[i % kAlive], 0, thread_alot_func, 0);
543cab2bb3Spatrick   }
553cab2bb3Spatrick   for (int i = 0; i < kAlive; i++) {
563cab2bb3Spatrick     pthread_join(threads[i], 0);
573cab2bb3Spatrick   }
583cab2bb3Spatrick }
59