From e7e9ac91c26b6b1d9d5ca7c20f1f01b71eb2adf1 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 21 Oct 2006 16:06:11 +0000 Subject: [PATCH] one more correction to wxCondition::WaitTimeout() return code: don't overwrite err with the semaphore wait result (bug 1387179) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42206 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/thrimpl.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/include/wx/thrimpl.cpp b/include/wx/thrimpl.cpp index 6e49c573e1..ba4aa31bb7 100644 --- a/include/wx/thrimpl.cpp +++ b/include/wx/thrimpl.cpp @@ -116,12 +116,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 +154,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--; } -- 2.45.2