pthread_cleanup_push as a macro

Alfred Perlstein alfred at freebsd.org
Sat May 31 01:55:32 UTC 2008


* John Baldwin <jhb at freebsd.org> [080530 18:49] wrote:
> On Friday 30 May 2008 02:41:41 pm Alfred Perlstein wrote:
> > * David Xu <davidxu at freebsd.org> [080529 23:40] wrote:
> > > I would like to make pthread_cleanup_push and pthread_cleanup_pop as a
> > > pair of macros, the current implementation has to malloc() and free() a
> > > pthread_cleanup memory block everytime, this is slow, the new one
> > > simply uses stack space, note that other OSes have already done it in 
> > > this way. The patch keeps old functions and should not have binary
> > > compatible problem.
> > > 
> > > http://people.freebsd.org/~davidxu/patch/pthread_cleanup_push.patch
> > 
> > Heh, when I had to use QNX on a project this totally confused
> > me, but if others are doing it then go for it.
> > 
> > Does Solaris do it?
> 
> It's explicitly documented in the standard that push and pop may be 
> implemented as macros and that they have to be paired at the same block level 
> (i.e. it's permitted for push to start a new block and declare a new local 
> variable and for pop to end that block similar to DROP_GIANT/PICKUP_GIANT in 
> the kernel).  Internally the thread libraries already do this for internal 
> push/pops to avoid deadlocks.

I figured it was "OK", just was interested in how Solaris did it.
-- 
- Alfred Perlstein


More information about the freebsd-threads mailing list