1213155Sdavidxu/* $FreeBSD$ */
2213155Sdavidxu/* try to catch thread exiting, and rethrow the exception */
3213155Sdavidxu
4213155Sdavidxu#include <pthread.h>
5213155Sdavidxu#include <stdio.h>
6213155Sdavidxu#include <stdlib.h>
7213155Sdavidxu
8213155Sdavidxuint caught;
9213155Sdavidxu
10213155Sdavidxuvoid *
11213155Sdavidxuthr_routine(void *arg)
12213155Sdavidxu{
13213155Sdavidxu	try {
14213155Sdavidxu		pthread_exit(NULL);
15213155Sdavidxu	} catch (...) {
16213155Sdavidxu		caught = 1;
17213155Sdavidxu		printf("thread exiting exception caught\n");
18213155Sdavidxu		/* rethrow */
19213155Sdavidxu		throw;
20213155Sdavidxu	}
21213155Sdavidxu}
22213155Sdavidxu
23213155Sdavidxuint
24213155Sdavidxumain()
25213155Sdavidxu{
26213155Sdavidxu	pthread_t td;
27213155Sdavidxu
28213155Sdavidxu	pthread_create(&td, NULL, thr_routine, NULL);
29213155Sdavidxu	pthread_join(td, NULL);
30213155Sdavidxu	if (caught)
31213155Sdavidxu		printf("OK\n");
32213155Sdavidxu	else
33213155Sdavidxu		printf("failure\n");
34213155Sdavidxu	return (0);
35213155Sdavidxu}
36