Add DRD suppression patterns for races triggered by std::ostream
[valgrind.git] / drd / tests / pth_create_chain.c
blobe0771243d9391d5f88cce558c70e10d6e80e523c
1 // Create threads in such a way that there is a realistic chance that the
2 // parent thread finishes before the created thread finishes.
5 #include <assert.h>
6 #include <limits.h> /* PTHREAD_STACK_MIN */
7 #include <stdlib.h>
8 #include <stdio.h>
9 #include <pthread.h>
12 static pthread_t s_thread[1000];
13 static int s_arg[1000];
15 static void* thread_func(void* p)
17 int thread_count = *(int*)(p);
18 pthread_attr_t attr;
20 if (thread_count > 0)
22 thread_count--;
23 // std::cout << "create " << thread_count << std::endl;
24 s_arg[thread_count] = thread_count;
25 pthread_attr_init(&attr);
26 pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN);
27 pthread_create(&s_thread[thread_count], &attr, thread_func,
28 &s_arg[thread_count]);
29 pthread_attr_destroy(&attr);
30 #if 0
31 std::cout << "created " << thread_count << "(" << s_thread[thread_count]
32 << ")" << std::endl;
33 #endif
35 return 0;
38 int main(int argc, char** argv)
40 pthread_attr_t attr;
41 unsigned thread_count;
42 int i;
44 thread_count = argc > 1 ? atoi(argv[1]) : 50;
45 assert(thread_count <= sizeof(s_thread) / sizeof(s_thread[0]));
46 assert(thread_count >= 1);
47 thread_count--;
48 // std::cout << "create " << thread_count << std::endl;
49 pthread_attr_init(&attr);
50 pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN);
51 pthread_create(&s_thread[thread_count], &attr, thread_func,
52 &thread_count);
53 pthread_attr_destroy(&attr);
54 #if 0
55 std::cout << "created " << thread_count << "(" << s_thread[thread_count]
56 << ")" << std::endl;
57 #endif
58 for (i = thread_count; i >= 0; i--)
60 // std::cout << "join " << i << "(" << s_thread[i] << ")" << std::endl;
61 pthread_join(s_thread[i], 0);
63 return 0;