1*e04b953eSDavid Xu /* $FreeBSD$ */ 2*e04b953eSDavid Xu /* Test stack unwinding for pthread_cond_wait function */ 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 pthread_mutex_t mtx; 12*e04b953eSDavid Xu pthread_cond_t cv; 13*e04b953eSDavid Xu 14*e04b953eSDavid Xu void * thr(void * arg)15*e04b953eSDavid Xuthr(void *arg) 16*e04b953eSDavid Xu { 17*e04b953eSDavid Xu Test t; 18*e04b953eSDavid Xu 19*e04b953eSDavid Xu pthread_mutex_lock(&mtx); 20*e04b953eSDavid Xu pthread_cond_wait(&cv, &mtx); 21*e04b953eSDavid Xu pthread_mutex_unlock(&mtx); 22*e04b953eSDavid Xu printf("Bug, thread shouldn't be here.\n"); 23*e04b953eSDavid Xu return (0); 24*e04b953eSDavid Xu } 25*e04b953eSDavid Xu 26*e04b953eSDavid Xu int main()27*e04b953eSDavid Xumain() 28*e04b953eSDavid Xu { 29*e04b953eSDavid Xu pthread_t td; 30*e04b953eSDavid Xu 31*e04b953eSDavid Xu pthread_mutex_init(&mtx, NULL); 32*e04b953eSDavid Xu pthread_cond_init(&cv, NULL); 33*e04b953eSDavid Xu pthread_create(&td, NULL, thr, NULL); 34*e04b953eSDavid Xu sleep(1); 35*e04b953eSDavid Xu pthread_cancel(td); 36*e04b953eSDavid Xu pthread_join(td, NULL); 37*e04b953eSDavid Xu check_destruct(); 38*e04b953eSDavid Xu return (0); 39*e04b953eSDavid Xu } 40