pthread_cleanup_push & pthread_cleanup_pop usage
Alfred Perlstein
alfred at freebsd.org
Wed Oct 8 19:53:25 UTC 2008
* John Hein <jhein at timing.com> [081008 12:48] wrote:
> John Baldwin wrote at 14:09 -0400 on Oct 8, 2008:
> > Don't Do That (tm). The spec explicitly states that they can be defined as
> > macros and that code using it needs to put them in the same block.
>
> Thanks for the responses. I like deischen's response best to work
> around the problem short term, but I suspect that's not very portable.
> And as jhb describes using it outside the same block violates the
> spirit of intended use.
>
> Note that the example I gave (pop off the cleanup stack in a catch
> block) is not our only "violation". We also push in one function and
> either never [explicitly] pop or possibly pop in another function.
>
> So that leaves me wondering about possible techniques for cleanup on
> thread cancellation or exit. Alfred touched on one method, and I see
> that pthread_key_create takes an optional destructor, so that sounds
> like a possible avenue to explore.
I'm positive that you'll have a solution given my starting point
within a few hours. :)
All the cpp_cleanup_push() needs to do is to:
pthread_once() -> set up the pthread_key and destructor as you said.
then pthread_getspecific to get the stack
if no stack, make one and set it.
then push your cleanup function.
good luck,
--
- Alfred Perlstein
More information about the freebsd-threads
mailing list