none/tests/fdleak_cmsg_supp.supp: Add suppressions for older glibc
[valgrind.git] / drd / tests / thread_name_freebsd.c
blob0f4954ba7cb7a1256567a023d08a810b4a1edb06
1 /* Test whether assigning names to threads works properly. */
3 #define _GNU_SOURCE
4 #include <pthread.h>
5 #include <stddef.h>
6 #include <stdio.h>
7 #include <string.h>
8 #include "../../drd/drd.h"
11 #define NUM_THREADS 10
14 static pthread_barrier_t s_barrier;
15 static pthread_mutex_t s_mutex;
16 static pthread_cond_t s_cond;
17 static int s_counter;
19 static void* thread_func(void* argp)
21 const int thread_num = (ptrdiff_t)(argp);
22 pthread_mutex_t invalid_mutex;
23 char thread_name[32];
25 snprintf(thread_name, sizeof(thread_name),
26 "thread_func instance %d", thread_num + 1);
27 ANNOTATE_THREAD_NAME(thread_name);
29 pthread_barrier_wait(&s_barrier);
31 pthread_mutex_lock(&s_mutex);
32 while (s_counter != thread_num)
33 pthread_cond_wait(&s_cond, &s_mutex);
34 fprintf(stderr, "\n%s\n\n", thread_name);
35 pthread_mutex_unlock(&invalid_mutex);
36 s_counter++;
37 pthread_cond_broadcast(&s_cond);
38 pthread_mutex_unlock(&s_mutex);
40 return 0;
44 int main(int arg, char** argv)
46 int i;
47 pthread_t tid[NUM_THREADS];
49 pthread_barrier_init(&s_barrier, NULL, NUM_THREADS);
50 pthread_mutex_init(&s_mutex, 0);
51 pthread_cond_init(&s_cond, 0);
53 for (i = 0; i < NUM_THREADS; i++)
54 pthread_create(&tid[i], 0, thread_func, (void*)(ptrdiff_t)i);
56 for (i = 0; i < NUM_THREADS; i++)
57 pthread_join(tid[i], 0);
59 pthread_cond_destroy(&s_cond);
60 pthread_mutex_destroy(&s_mutex);
62 return 0;