X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f0f044dcbe59a8085359073abcb41d250c18dac7..ee6dd41a508c2bf598c178696a43bb665e0d4c01:/include/wx/thrimpl.cpp diff --git a/include/wx/thrimpl.cpp b/include/wx/thrimpl.cpp index 60ead20789..c1f13ec3d9 100644 --- a/include/wx/thrimpl.cpp +++ b/include/wx/thrimpl.cpp @@ -64,12 +64,12 @@ wxMutexError wxMutex::Unlock() // wxConditionInternal // -------------------------------------------------------------------------- -#if defined(__WXMSW__) || defined(__WXPM__) || defined(__EMX__) +#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(__WXPM__) || defined(__EMX__) +#if defined(__OS2__) || defined(__EMX__) void InterlockedIncrement(LONG *num) { ::DosEnterCritSec(); @@ -133,7 +133,12 @@ wxCondError wxConditionInternal::Wait() wxSemaError err = m_semaphore.Wait(); m_mutex.Lock(); - return err == wxSEMA_NO_ERROR ? wxCOND_NO_ERROR : wxCOND_MISC_ERROR; + if ( err == wxSEMA_NO_ERROR ) + return wxCOND_NO_ERROR; + else if ( err == wxSEMA_TIMEOUT ) + return wxCOND_TIMEOUT; + else + return wxCOND_MISC_ERROR; } wxCondError wxConditionInternal::WaitTimeout(unsigned long milliseconds) @@ -148,7 +153,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 @@ -174,7 +179,9 @@ wxCondError wxConditionInternal::WaitTimeout(unsigned long milliseconds) m_mutex.Lock(); - return err == wxSEMA_NO_ERROR ? wxCOND_NO_ERROR : wxCOND_MISC_ERROR; + return err == wxSEMA_NO_ERROR ? wxCOND_NO_ERROR + : err == wxSEMA_TIMEOUT ? wxCOND_TIMEOUT + : wxCOND_MISC_ERROR; } wxCondError wxConditionInternal::Signal()