xref: /freebsd/tools/regression/pthread/unwind/catch_pthread_exit.cpp (revision cfd6422a5217410fbd66f7a7a8a64d9d85e61229)
1 /* $FreeBSD$ */
2 /* try to catch thread exiting, and rethrow the exception */
3 
4 #include <pthread.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 
8 int caught;
9 
10 void *
11 thr_routine(void *arg)
12 {
13 	try {
14 		pthread_exit(NULL);
15 	} catch (...) {
16 		caught = 1;
17 		printf("thread exiting exception caught\n");
18 		/* rethrow */
19 		throw;
20 	}
21 }
22 
23 int
24 main()
25 {
26 	pthread_t td;
27 
28 	pthread_create(&td, NULL, thr_routine, NULL);
29 	pthread_join(td, NULL);
30 	if (caught)
31 		printf("OK\n");
32 	else
33 		printf("failure\n");
34 	return (0);
35 }
36