fixed a race condition resulting in returning incorrect thread exit code

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14917 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2002-04-03 00:13:48 +00:00
parent 461c9b848b
commit 10671c6791

View File

@ -1135,12 +1135,18 @@ wxThreadError wxThread::Delete(ExitCode *pRc)
} }
} }
if ( !::GetExitCodeThread(hThread, (LPDWORD)&rc) ) // although the thread might be already in the EXITED state it might not
// have terminated yet and so we are not sure that it has actually
// terminated if the "if" above hadn't been taken
do
{ {
wxLogLastError(wxT("GetExitCodeThread")); if ( !::GetExitCodeThread(hThread, (LPDWORD)&rc) )
{
wxLogLastError(wxT("GetExitCodeThread"));
rc = (ExitCode)-1; rc = (ExitCode)-1;
} }
} while ( (DWORD)rc == STILL_ACTIVE );
if ( IsDetached() ) if ( IsDetached() )
{ {
@ -1151,9 +1157,6 @@ wxThreadError wxThread::Delete(ExitCode *pRc)
delete this; delete this;
} }
wxASSERT_MSG( (DWORD)rc != STILL_ACTIVE,
wxT("thread must be already terminated.") );
if ( pRc ) if ( pRc )
*pRc = rc; *pRc = rc;