]> git.saurik.com Git - wxWidgets.git/commitdiff
fix MT-unsafe accesses to wxConditionInternal::m_numWaiters
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 19 Feb 2006 14:38:20 +0000 (14:38 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 19 Feb 2006 14:38:20 +0000 (14:38 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37638 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/thrimpl.cpp

index c1f13ec3d9f1998b97a93bd9ac3c65eb6cb6394b..6e49c573e1afda22b618249ee8cffbaf22101ba7 100644 (file)
@@ -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