Home » U++ Library support » U++ Library : Other (not classified elsewhere) » thread bug....and fix
thread bug....and fix [message #52160] |
Tue, 30 July 2019 14:53  |
aftershock
Messages: 143 Registered: May 2008
|
Experienced Member |
|
|
Hi,
Bug report.
It seems that
handle can be 0 at unexpected places,
So I added additional checks for that to fix.
See added lines.
Wait function got stuck at WaitForSingleObject when handle was 0.
int Thread::Wait()
{
if(!IsOpen())
return -1;
int out;
#ifdef PLATFORM_WIN32
dword exit;
if(!GetExitCodeThread(handle, &exit))
return -1;
if(exit != STILL_ACTIVE)
out = (int)exit;
else
{
if (!IsOpen()) // ADDED THIS LINE
return Null;
if(WaitForSingleObject(handle, INFINITE) != WAIT_OBJECT_0)
return Null;
if (!IsOpen()) // ADDED THIS LINE
return Null;
out = GetExitCodeThread(handle, &exit) ? int(exit) : int(Null);
}
Detach();
#endif
#ifdef PLATFORM_POSIX
void *thread_return;
if(pthread_join(handle, &thread_return))
out = Null;
else
out = (int)(intptr_t)thread_return;
handle = 0;
#endif
return out;
}
[Updated on: Wed, 31 July 2019 12:55] Report message to a moderator
|
|
|
|
|
Re: thread bug....and fix [message #52177 is a reply to message #52169] |
Fri, 02 August 2019 11:34   |
 |
mirek
Messages: 14202 Registered: November 2005
|
Ultimate Member |
|
|
aftershock wrote on Wed, 31 July 2019 12:57It is where I added the lines.
GetExitCodeThread(handle....
handle was 0 in the debugger.
Application Verifier... detected those things.
I mean, what is your code?
Somehow I fail to grasp how calling Wait with NULL handle could have happened.
To be more specific, as long as there is no catastrophic failure of client code, handle can get 0 in 3 ways:
- thread creation fails. Why do you call Wait in that case?
- Detach is called. Why do you call Wait in that case?
- no attempt to start thread (default constructor). Why do you call Wait in that case?
So I am really curious what has happened here. In other words, if above patch is really fixing something, then this requires much more careful investigation because it would mean many things are not what they should be.....
(Ideally, testcase package demonstrating the problem would be welcome).
Mirek
[Updated on: Fri, 02 August 2019 11:40] Report message to a moderator
|
|
|
|
|
Goto Forum:
Current Time: Thu Feb 13 14:35:31 CET 2025
Total time taken to generate the page: 0.03265 seconds
|