X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2d0bea2c37ff0c3af4396c62a89be5aee1cc8065..09b67c660cadef225cbf8f1986cfe591f8feae8c:/include/wx/thrimpl.cpp diff --git a/include/wx/thrimpl.cpp b/include/wx/thrimpl.cpp index 6e49c573e1..63b837fec6 100644 --- a/include/wx/thrimpl.cpp +++ b/include/wx/thrimpl.cpp @@ -44,6 +44,14 @@ wxMutexError wxMutex::Lock() return m_internal->Lock(); } +wxMutexError wxMutex::LockTimeout(unsigned long ms) +{ + wxCHECK_MSG( m_internal, wxMUTEX_INVALID, + _T("wxMutex::Lock(): not initialized") ); + + return m_internal->Lock(ms); +} + wxMutexError wxMutex::TryLock() { wxCHECK_MSG( m_internal, wxMUTEX_INVALID, @@ -116,12 +124,12 @@ wxCondError wxConditionInternal::Wait() // a potential race condition can occur here // - // after a thread increments nwaiters, and unlocks the mutex and before the - // semaphore.Wait() is called, if another thread can cause a signal to be - // generated + // after a thread increments m_numWaiters, and unlocks the mutex and before + // the semaphore.Wait() is called, if another thread can cause a signal to + // be generated // // this race condition is handled by using a semaphore and incrementing the - // semaphore only if 'nwaiters' is greater that zero since the semaphore, + // semaphore only if m_numWaiters is greater that zero since the semaphore, // can 'remember' signals the race condition will not occur // wait ( if necessary ) and decrement semaphore @@ -154,22 +162,22 @@ wxCondError wxConditionInternal::WaitTimeout(unsigned long milliseconds) if ( err == wxSEMA_TIMEOUT ) { // another potential race condition exists here it is caused when a - // 'waiting' thread timesout, and returns from WaitForSingleObject, but - // has not yet decremented 'nwaiters'. + // 'waiting' thread times out, and returns from WaitForSingleObject, + // but has not yet decremented m_numWaiters // // at this point if another thread calls signal() then the semaphore // will be incremented, but the waiting thread will miss it. // // to handle this particular case, the waiting thread calls // WaitForSingleObject again with a timeout of 0, after locking - // 'nwaiters_mutex'. this call does not block because of the zero + // m_csWaiters. This call does not block because of the zero // timeout, but will allow the waiting thread to catch the missed // signals. wxCriticalSectionLocker lock(m_csWaiters); - err = m_semaphore.WaitTimeout(0); + wxSemaError err2 = m_semaphore.WaitTimeout(0); - if ( err != wxSEMA_NO_ERROR ) + if ( err2 != wxSEMA_NO_ERROR ) { m_numWaiters--; }