1*e04b953eSDavid Xu /* $FreeBSD$ */ 2*e04b953eSDavid Xu /* Test stack unwinding for libc's sem */ 3*e04b953eSDavid Xu 4*e04b953eSDavid Xu #include <pthread.h> 5*e04b953eSDavid Xu #include <stdio.h> 6*e04b953eSDavid Xu #include <semaphore.h> 7*e04b953eSDavid Xu #include <unistd.h> 8*e04b953eSDavid Xu 9*e04b953eSDavid Xu #include "Test.cpp" 10*e04b953eSDavid Xu 11*e04b953eSDavid Xu sem_t sem; 12*e04b953eSDavid Xu 13*e04b953eSDavid Xu void * thr(void * arg)14*e04b953eSDavid Xuthr(void *arg) 15*e04b953eSDavid Xu { 16*e04b953eSDavid Xu Test t; 17*e04b953eSDavid Xu 18*e04b953eSDavid Xu sem_wait(&sem); 19*e04b953eSDavid Xu printf("Bug, thread shouldn't be here.\n"); 20*e04b953eSDavid Xu return (0); 21*e04b953eSDavid Xu } 22*e04b953eSDavid Xu 23*e04b953eSDavid Xu int main()24*e04b953eSDavid Xumain() 25*e04b953eSDavid Xu { 26*e04b953eSDavid Xu pthread_t td; 27*e04b953eSDavid Xu 28*e04b953eSDavid Xu sem_init(&sem, 0, 0); 29*e04b953eSDavid Xu pthread_create(&td, NULL, thr, NULL); 30*e04b953eSDavid Xu sleep(1); 31*e04b953eSDavid Xu pthread_cancel(td); 32*e04b953eSDavid Xu pthread_join(td, NULL); 33*e04b953eSDavid Xu check_destruct(); 34*e04b953eSDavid Xu return (0); 35*e04b953eSDavid Xu } 36