xref: /dragonfly/test/pthread/setname/pthread_setname.c (revision 0ca59c3431dcb07cc5de00e279c574459aa3bc34)
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 *
setselfname(void * arg __unused)9 setselfname(void *arg __unused)
10 {
11           pthread_set_name_np(pthread_self(), __func__);
12           pause();
13           return NULL;
14 }
15 
16 static void *
waitname(void * arg __unused)17 waitname(void *arg __unused)
18 {
19           pause();
20           return NULL;
21 }
22 
23 static void *
resetname(void * arg __unused)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
main(void)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 }
60