X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c112e10026f5ad27704c1447be81b51664a0e070..2d956b58023a4955313a1c1531bc70a0deb0b831:/src/msw/thread.cpp

diff --git a/src/msw/thread.cpp b/src/msw/thread.cpp
index 7a42d2e60e..e2c76f9389 100644
--- a/src/msw/thread.cpp
+++ b/src/msw/thread.cpp
@@ -371,6 +371,8 @@ private:
     wxMutex& m_mutex;
 
     wxSemaphore m_semaphore;
+
+    DECLARE_NO_COPY_CLASS(wxConditionInternal)
 };
 
 wxConditionInternal::wxConditionInternal(wxMutex& mutex)
@@ -1135,12 +1137,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() )
     {
@@ -1151,9 +1159,6 @@ wxThreadError wxThread::Delete(ExitCode *pRc)
         delete this;
     }
 
-    wxASSERT_MSG( (DWORD)rc != STILL_ACTIVE,
-                  wxT("thread must be already terminated.") );
-
     if ( pRc )
         *pRc = rc;