pthread_cleanup_push as a macro
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