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:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user