public inbox for pthreads-win32@sourceware.org
 help / color / mirror / Atom feed
* pthread_join problem
@ 2007-03-27 13:44 Stefan Eilemann
  2007-03-31  7:15 ` Ross Johnson
  0 siblings, 1 reply; 2+ messages in thread
From: Stefan Eilemann @ 2007-03-27 13:44 UTC (permalink / raw)
  To: Pthreads-Win32 list

Hello,

I am in the situation that a pthread_join does not return, even
though the thread has called pthread_exit.

I read the cleanup notes, but I think it does not apply here.

I am using the C cleanup code. One thread calls pthread_exit,
the other phtread_join. I've verified that the thread calling
pthread_exit does the longjmp to the thread start code, which
calls _endthreadex.

The main thread calling pthread_join does hang in
WaitForMultipleObjects.

The problem only occurs when I am using some unrelated(?)
external code (the Mellanox SDP Infiniband implementation),
so it could be caused by that, or just be a race appearing
with this code.

There are other pthreads in my application, which terminate
correctly with pthread_exit/pthread_join. Only one thread -
the network receive thread ;)- does exhibit the problem.

Do you have an idea what could be the cause of this problem?
Anything else I could try to find the problem?


Best Regards,

Stefan.

PS: I've tested the Win64 version, and it works like a charm.
-- 
http://www.equalizergraphics.com
http://www.linkedin.com/in/eilemann



^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: pthread_join problem
  2007-03-27 13:44 pthread_join problem Stefan Eilemann
@ 2007-03-31  7:15 ` Ross Johnson
  0 siblings, 0 replies; 2+ messages in thread
From: Ross Johnson @ 2007-03-31  7:15 UTC (permalink / raw)
  To: Stefan Eilemann; +Cc: Pthreads-Win32 list

Stefan Eilemann wrote:
> Hello,
>
> I am in the situation that a pthread_join does not return, even
> though the thread has called pthread_exit.
>
> I read the cleanup notes, but I think it does not apply here.
>
> I am using the C cleanup code. One thread calls pthread_exit,
> the other phtread_join. I've verified that the thread calling
> pthread_exit does the longjmp to the thread start code, which
> calls _endthreadex.
>
> The main thread calling pthread_join does hang in
> WaitForMultipleObjects.
>
> The problem only occurs when I am using some unrelated(?)
> external code (the Mellanox SDP Infiniband implementation),
> so it could be caused by that, or just be a race appearing
> with this code.
>
> There are other pthreads in my application, which terminate
> correctly with pthread_exit/pthread_join. Only one thread -
> the network receive thread ;)- does exhibit the problem.
>
> Do you have an idea what could be the cause of this problem?
> Anything else I could try to find the problem?
One thing that comes to mind that seems to fit the evidence assumes that 
the external code that you mentioned is a DLL and it executes it's own 
dllMain routine which somehow interferes with pthread-win32's thread 
exit cleanup. This would be occurring after _endthreadex() is called, 
which you've verified is called.

I don't know how Win32 determines which and in what order these 
dllMain's are called (is it the order the DLLs are loaded?), but 
pthreads-win32 does rely on this mechanism to do some final cleanup and 
status setting for each 'POSIX' thread, and if this doesn't get done I 
imagine it's possible you would see symptoms like this.

Pthreads-win32's dllMain() calls pthread_win32_thread_detach_np() in 
pthread_win32_attach_detach_np.c. To verify that this is happening you 
could set up a thread-specific data key and give it a destructor 
routine, have your problem thread set it to a non-null value, and then 
see if the destructor routine is called.

Regards.
Ross
>
> Best Regards,
>
> Stefan.
>
> PS: I've tested the Win64 version, and it works like a charm.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-03-27 13:44 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-03-27 13:44 pthread_join problem Stefan Eilemann
2007-03-31  7:15 ` Ross Johnson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).