]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/thread.cpp
use WX_ASSERT_STR/SIZET_EQUAL instead of CPPUNIT_ASSERT_EQUAL with casts
[wxWidgets.git] / src / mac / carbon / thread.cpp
index 7a981d6206b2208b99136c3f7f9007386cabe3c1..cacf2e5e35a0d7fe168da6e4f49c278319ed1cbd 100644 (file)
 
 #ifndef WX_PRECOMP
     #include "wx/wx.h"
+    #include "wx/module.h"
 #endif
 
 #if wxUSE_THREADS
 
-#include "wx/module.h"
 #include "wx/thread.h"
 
 #ifdef __WXMAC__
@@ -418,10 +418,10 @@ public:
     wxMutexInternal( wxMutexType mutexType );
     virtual ~wxMutexInternal();
 
-    bool IsOk() const
-    { return m_isOk; }
+    bool IsOk() const { return m_isOk; }
 
-    wxMutexError Lock() ;
+    wxMutexError Lock() { return Lock(kDurationForever); }
+    wxMutexError Lock(unsigned long ms);
     wxMutexError TryLock();
     wxMutexError Unlock();
 
@@ -451,15 +451,23 @@ wxMutexInternal::~wxMutexInternal()
     MPYield();
 }
 
-wxMutexError wxMutexInternal::Lock()
+wxMutexError wxMutexInternal::Lock(unsigned long ms)
 {
     wxCHECK_MSG( m_isOk , wxMUTEX_MISC_ERROR , wxT("Invalid Mutex") );
 
-    OSStatus err = MPEnterCriticalRegion( m_critRegion, kDurationForever);
-    if (err != noErr)
+    OSStatus err = MPEnterCriticalRegion( m_critRegion, ms );
+    switch ( err )
     {
-        wxLogSysError(wxT("Could not lock mutex"));
-        return wxMUTEX_MISC_ERROR;
+        case noErr:
+            break;
+
+        case kMPTimeoutErr:
+            wxASSERT_MSG( ms != kDurationForever, wxT("unexpected timeout") );
+            return wxMUTEX_TIMEOUT;
+
+        default:
+            wxLogSysError(wxT("Could not lock mutex"));
+            return wxMUTEX_MISC_ERROR;
     }
 
     return wxMUTEX_NO_ERROR;
@@ -829,7 +837,7 @@ wxCondError wxConditionInternal::WaitTimeout( unsigned long milliseconds )
 
     wxSemaError err = m_semaphore.WaitTimeout(milliseconds);
 
-    if ( err == wxSEMA_BUSY )
+    if ( err == wxSEMA_TIMEOUT )
     {
         // another potential race condition exists here it is caused when a
         // 'waiting' thread timesout, and returns from WaitForSingleObject, but
@@ -1640,7 +1648,12 @@ IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
 
 bool wxThreadModule::OnInit()
 {
-    bool hasThreadManager = MPLibraryIsLoaded();
+    bool hasThreadManager = 
+#ifdef __LP64__ 
+        true ; // TODO VERIFY IN NEXT BUILD
+#else
+        MPLibraryIsLoaded();
+#endif
 
     if ( !hasThreadManager )
     {