Pthread_join waits endlessly for already ended thread
Ross Johnson
Ross.Johnson@homemail.com.au
Fri Mar 20 23:37:00 GMT 2009
Virgilio Alexandre Fornazin wrote:
> I had a problem similar to this, and creating an event handle for signaling
> solves nothing.
>
> I had this problem in plain win32 threads before. This always happened in
> DLL_PROCESS_DETACH.
> It´s probably a bad design / limitation in win32 shared library model. The
> cause, if I remember,
> is that the heap is locked in some way that functions related to thread
> (TerminateThread if I'm
> not missing other) must access this heap, then it deadlocks in some locking
> Windows have internally.
>
This is good to know in case all else fails.
The library does have a compile-time condition that will cause threads
to enter/exit via _beginthread()/_endthread() rather than the preferred
_beginthreadex()/_endthreadex() versions, and MS documentation does say
that _endthread() closes the Win32 thread handle resulting in no
signalling, e.g. to WaitFor*(). This is one case that does exist in the
library and needs to be fixed unless I'm mistaken.
The pre-built pthreads-win32 DLLs should be using _endthreadex() but in
this case it is still the exiting thread that explicitly closes the
Win32 thread handle before _endthreadex() is called. I'd like to move
that close to the joining thread.
More information about the Pthreads-win32
mailing list