implement wxMutex::LockTimeout() using critical region API too

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44705 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-03-09 23:21:22 +00:00
parent ec5006bdc6
commit f9efaa8b62

View File

@@ -418,10 +418,10 @@ public:
wxMutexInternal( wxMutexType mutexType ); wxMutexInternal( wxMutexType mutexType );
virtual ~wxMutexInternal(); virtual ~wxMutexInternal();
bool IsOk() const bool IsOk() const { return m_isOk; }
{ return m_isOk; }
wxMutexError Lock() ; wxMutexError Lock() { return Lock(kDurationForever); }
wxMutexError Lock(unsigned long ms);
wxMutexError TryLock(); wxMutexError TryLock();
wxMutexError Unlock(); wxMutexError Unlock();
@@ -451,15 +451,23 @@ wxMutexInternal::~wxMutexInternal()
MPYield(); MPYield();
} }
wxMutexError wxMutexInternal::Lock() wxMutexError wxMutexInternal::Lock(unsigned long ms)
{ {
wxCHECK_MSG( m_isOk , wxMUTEX_MISC_ERROR , wxT("Invalid Mutex") ); wxCHECK_MSG( m_isOk , wxMUTEX_MISC_ERROR , wxT("Invalid Mutex") );
OSStatus err = MPEnterCriticalRegion( m_critRegion, kDurationForever); OSStatus err = MPEnterCriticalRegion( m_critRegion, ms );
if (err != noErr) switch ( err )
{ {
wxLogSysError(wxT("Could not lock mutex")); case noErr:
return wxMUTEX_MISC_ERROR; 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; return wxMUTEX_NO_ERROR;