Hi, I have a problem with the small program attached below that does not do what I expect. The program prints:
cancelling cleanup cancelled, joining exception last chance thread is about to return pthread_join hangs infinitely. I expect the join to resume because the thread has exitted. What is a problem? The cygwin version info: $ uname -a CYGWIN_NT-5.2-WOW64 artem64 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin The program compiler as: $ g++ -o th.exe th.cpp Thanks in advance, Artem Alimarine //===================================================== #include <pthread.h> #include <unistd.h> #include <exception> #include <iostream> using namespace std; class exit_exception {}; void cleanup_routine(void*) { cout << "cleanup\n"; throw exit_exception(); } void foo() { try { sleep(100); } catch(const exit_exception&) { cout << "exception\n"; throw; } } void* thread_routine(void*) { try { pthread_cleanup_push(cleanup_routine, NULL); foo(); pthread_cleanup_pop(0); } catch(const exit_exception&) { cout << "last chance\n"; } cout << "thread is about to return\n"; return NULL; } int main() { pthread_t the_handle; int res; res = pthread_create(&the_handle, NULL, thread_routine, NULL); assert(res == 0); sleep(1); cout << "cancelling\n"; res = pthread_cancel(the_handle); assert(res == 0); cout << "cancelled, joining\n"; res = pthread_join(the_handle, NULL); assert(res == 0); cout << "joined\n"; pthread_detach(the_handle); } //===================================================== -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/