pthread_cleanup_push not working with uClibc

Alan Cooper alcooperx at
Fri Feb 24 17:26:13 UTC 2012

I'm having a problem with a C++ program where the the
pthread_cleanup_push cleanup routine is not being called when the
thread is cancelled. This is happening because class destructors are
not being called by the exception unwind routine. I found the problem
to be caused by the fact that some of the system calls that are
cancellation points, in this case sleep(), don't have the .eh_frame
info needed to unwind the stack frames and break the unwind chain. I
see that the CFLAGS for some modules have -fexceptions set, which will
cause the .eh_frame to be generated, but this flag is not set for all
the standard Linux defined cancellation points. Am I missing something
here or has this always been broken?

Al Cooper

More information about the uClibc mailing list