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