On Sat, 14 Jul 2001, Aaron Bannert wrote:
> On Sat, Jul 14, 2001 at 12:27:05PM -0700, Justin Erenkrantz wrote:
> > And, you can't kick the thread out of the mutex acquire (pthread_cancel
> > or similar strategies don't cancel a mutex operation), so you are
> > screwed. And, destroying its parent pool does *NOT* destroy the
> > thread. Look at the code again. The only person that can call
> > pthread_exit() is the actual thread itself. You can't call
> > pthread_exit on behalf of another thread (i.e. from the thread that
> > knows it is doomed or a cleanup thread). It just doesn't work like
> > that.
>
> Here's what my box's pthread_cancel man page says:
>
> Cancellation points are those points in the program execu�
> tion where a test for pending cancellation requests is
> performed and cancellation is executed if positive. The
> following POSIX threads functions are cancellation points:
>
> pthread_join(3)
> pthread_cond_wait(3)
> pthread_cond_timedwait(3)
> pthread_testcancel(3)
> sem_wait(3)
> sigwait(3)
>
> Doesn't pthread_mutex_acquire sit in sem_wait() or sigwait()? That'll
> let it be cancel()ed.
>
>
> Anyway, yes the pool cleanup routines that are supposed to be calling
> apr_thread_exit() are broken because nothing in httpd is calling
> apr_thread_exit() (AFA-my-grep-says). So let's either let the thread
> creator (aka httpd) do the cleanup registration, or put it in apr
> (as an optional feature).
Async cancellation of threads is VERY bad ju-ju. We don't do it because
it causes most, if not all, thread libraries to leak. The cleanups are
called because the child pool is destroyed when all the threads die.
Ryan
_____________________________________________________________________________
Ryan Bloom [EMAIL PROTECTED]
Covalent Technologies [EMAIL PROTECTED]
-----------------------------------------------------------------------------