pthread: Add lwp_setname(2) and implement pthread_set_name_np(3)
[dragonfly.git] / test / pthread / setname / pthread_setname.c
1 #include <err.h>
2 #include <pthread.h>
3 #include <pthread_np.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <unistd.h>
7
8 static void *
9 setselfname(void *arg __unused)
10 {
11         pthread_set_name_np(pthread_self(), __func__);
12         pause();
13         return NULL;
14 }
15
16 static void *
17 waitname(void *arg __unused)
18 {
19         pause();
20         return NULL;
21 }
22
23 static void *
24 resetname(void *arg __unused)
25 {
26         pthread_set_name_np(pthread_self(), __func__);
27         sleep(10);
28         pthread_set_name_np(pthread_self(), NULL);
29         pause();
30         return NULL;
31 }
32
33 int
34 main(void)
35 {
36         pthread_t tid1, tid2, tid3;
37         char longname[256];
38         int error;
39
40         error = pthread_create(&tid1, NULL, setselfname, NULL);
41         if (error)
42                 errc(1, error, "pthread_create(setselfname) failed");
43
44         error = pthread_create(&tid2, NULL, waitname, NULL);
45         if (error)
46                 errc(1, error, "pthread_create(waitname) failed");
47         pthread_set_name_np(tid2, "waitname");
48
49         error = pthread_create(&tid3, NULL, resetname, NULL);
50         if (error)
51                 errc(1, error, "pthread_create(resetname) failed");
52
53         memset(longname, 'x', sizeof(longname));
54         longname[sizeof(longname) - 1] = '\0';
55         pthread_set_name_np(pthread_self(), longname);
56
57         pause();
58         exit(0);
59 }