You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@apr.apache.org by "William A. Rowe, Jr." <wr...@rowe-clan.net> on 2004/08/02 03:07:23 UTC

Re: apr win32 bug [PATCH]

Although I agree, with your patch in spirit, if apr_thread_join is never
called, your patch -can- leak handles like a sieve :(

Did we ever define that apr_thread_create() must be partnered with
an apr_thread_join?  If not, it seems we need a clever way to mark
the apr_thread_t HANDLE member as destroyed, and allow the
apr_thread_join to simply return immediately.

Bill

At 04:52 PM 7/31/2004, Max Khon wrote:
>Hi!
>
>apr_thread_join for win32 is implemented incorrectly:
>thread handle is destroyed too early (in apr_thread_exit).
>If apr_thread_exit() is called before apr_thread_join() and
>new object is created (thread handle is reused) before
>calling apr_thread_join(), apr_thread_join() will possibly wait
>on invalid handle.
>
>Patch is attached.
>
>/fjoe



Re: apr win32 bug [PATCH]

Posted by Max Khon <fj...@samodelkin.net>.
Hi!

On Sun, Aug 01, 2004 at 08:07:23PM -0500, William A. Rowe, Jr. wrote:

> Although I agree, with your patch in spirit, if apr_thread_join is never
> called, your patch -can- leak handles like a sieve :(
> 
> Did we ever define that apr_thread_create() must be partnered with
> an apr_thread_join?

Yes.

>From pthread_join manual page on Linux:

       When  a  joinable  thread  terminates,  its  memory  resources  (thread
       descriptor and stack) are not deallocated until another thread performs
       pthread_join on it. Therefore, pthread_join must  be  called  once  for
       each joinable thread created to avoid memory leaks.

In other words you MUST call apr_thread_join when underlying implementation
is pthreads.

> If not, it seems we need a clever way to mark
> the apr_thread_t HANDLE member as destroyed, and allow the
> apr_thread_join to simply return immediately.

This would be an overkill.

Please look here as well:
http://issues.apache.org/bugzilla/show_bug.cgi?id=28460 

> Bill
> 
> At 04:52 PM 7/31/2004, Max Khon wrote:
> >Hi!
> >
> >apr_thread_join for win32 is implemented incorrectly:
> >thread handle is destroyed too early (in apr_thread_exit).
> >If apr_thread_exit() is called before apr_thread_join() and
> >new object is created (thread handle is reused) before
> >calling apr_thread_join(), apr_thread_join() will possibly wait
> >on invalid handle.
> >
> >Patch is attached.