pthread_cleanup_push & pthread_cleanup_pop usage

Daniel Eischen deischen at
Wed Oct 8 06:31:04 UTC 2008

On Tue, 7 Oct 2008, Alfred Perlstein wrote:

> * John Hein <jhein at> [081007 21:45] wrote:
>> In June pthread_cleanup_push & pthread_cleanup_pop were changed to macros
>> that look like so...
> Hey John, I found the same problem when working on QNX a while back,
> however that is really how it's supposed to be set up.
> I would suggest the following construct to fix the problem,
> make your own per-thread stack of destructors that are callable
> as functions and not macros.
> It's not too hard to do.
> Just use a pthread_key and pthread_once thingy to write a library
> to do it, shouldn't take more than a hundred lines of code.
> FWIW, OS X and QNX have the same set of macros, not sure about
> other OSes.

Solaris as well.

Just conditionally undef them before you use them.

 	#ifdef pthread_cleanup_push
 	#undef pthread_cleanup_push
         #ifdef pthread_cleanup_pop
         #undef pthread_cleanup_pop

The library versions are still there (they have to be in order
to be callable from non-C/C++ languages).


More information about the freebsd-threads mailing list