fix MT-unsafe accesses to wxConditionInternal::m_numWaiters
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37638 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
b0c43acc87
commit
2d0bea2c37
@ -64,19 +64,11 @@ wxMutexError wxMutex::Unlock()
|
||||
// wxConditionInternal
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
#if defined(__WXMSW__) || defined(__OS2__) || defined(__EMX__)
|
||||
// Win32 and OS/2 don't have explicit support for the POSIX condition
|
||||
// variables and their events/event semaphores have quite different semantics,
|
||||
// so we reimplement the conditions from scratch using the mutexes and
|
||||
// semaphores
|
||||
#if defined(__OS2__) || defined(__EMX__)
|
||||
void InterlockedIncrement(LONG *num)
|
||||
{
|
||||
::DosEnterCritSec();
|
||||
(*num)++;
|
||||
::DosExitCritSec();
|
||||
}
|
||||
#endif
|
||||
#if defined(__WXMSW__) || defined(__OS2__) || defined(__EMX__)
|
||||
|
||||
class wxConditionInternal
|
||||
{
|
||||
@ -115,7 +107,10 @@ wxConditionInternal::wxConditionInternal(wxMutex& mutex)
|
||||
wxCondError wxConditionInternal::Wait()
|
||||
{
|
||||
// increment the number of waiters
|
||||
::InterlockedIncrement(&m_numWaiters);
|
||||
{
|
||||
wxCriticalSectionLocker lock(m_csWaiters);
|
||||
m_numWaiters++;
|
||||
}
|
||||
|
||||
m_mutex.Unlock();
|
||||
|
||||
@ -143,7 +138,10 @@ wxCondError wxConditionInternal::Wait()
|
||||
|
||||
wxCondError wxConditionInternal::WaitTimeout(unsigned long milliseconds)
|
||||
{
|
||||
::InterlockedIncrement(&m_numWaiters);
|
||||
{
|
||||
wxCriticalSectionLocker lock(m_csWaiters);
|
||||
m_numWaiters++;
|
||||
}
|
||||
|
||||
m_mutex.Unlock();
|
||||
|
||||
@ -214,7 +212,8 @@ wxCondError wxConditionInternal::Broadcast()
|
||||
|
||||
return wxCOND_NO_ERROR;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // MSW or OS2
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxCondition
|
||||
|
Loading…
Reference in New Issue
Block a user