X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/faeb3cedce9ae68adf6acdfec6d9ee23fba9c5e5..e80edb8515cc574f8ad264f47bd9cfe9501cfc97:/include/wx/thrimpl.cpp?ds=sidebyside diff --git a/include/wx/thrimpl.cpp b/include/wx/thrimpl.cpp index c1f13ec3d9..6e49c573e1 100644 --- a/include/wx/thrimpl.cpp +++ b/include/wx/thrimpl.cpp @@ -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