pthread_cleanup_push & pthread_cleanup_pop usage
Daniel Eischen
deischen at freebsd.org
Wed Oct 8 06:31:04 UTC 2008
On Tue, 7 Oct 2008, Alfred Perlstein wrote:
> * John Hein <jhein at timing.com> [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
#endif
#ifdef pthread_cleanup_pop
#undef pthread_cleanup_pop
#endif
The library versions are still there (they have to be in order
to be callable from non-C/C++ languages).
--
DE
More information about the freebsd-threads
mailing list