pthread_cleanup_push as a macro
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.
More information about the freebsd-threads