pthread_cleanup_push as a macro

John Baldwin jhb at freebsd.org
Sat May 31 01:49:33 UTC 2008


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.

-- 
John Baldwin


More information about the freebsd-threads mailing list