diff options
Diffstat (limited to 'rts/win32/OSThreads.c')
-rw-r--r-- | rts/win32/OSThreads.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/rts/win32/OSThreads.c b/rts/win32/OSThreads.c index 46e363b3ab..2c1e462cb4 100644 --- a/rts/win32/OSThreads.c +++ b/rts/win32/OSThreads.c @@ -543,25 +543,22 @@ closeCondition( Condition* pCond STG_UNUSED) return; } -bool +void broadcastCondition ( Condition* pCond ) { WakeAllConditionVariable(pCond); - return true; } -bool +void signalCondition ( Condition* pCond ) { WakeConditionVariable(pCond); - return true; } -bool +void waitCondition ( Condition* pCond, Mutex* pMut ) { - SleepConditionVariableSRW(pCond, pMut, INFINITE, 0); - return true; + CHECK(SleepConditionVariableSRW(pCond, pMut, INFINITE, 0)); } bool @@ -570,8 +567,14 @@ timedWaitCondition ( Condition* pCond, Mutex* pMut, Time timeout ) // If we pass a timeout of 0 SleepConditionVariableSRW will return immediately // https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-sleepconditionvariablesrw DWORD ms = (DWORD)stg_min(1, TimeToMS(timeout)); - SleepConditionVariableSRW(pCond, pMut, ms, 0); - return true; + BOOL res = SleepConditionVariableSRW(pCond, pMut, ms, 0); + if (res) { + return true; // success + } else if (GetLastError() == ERROR_TIMEOUT) { + return false; // timeout + } else { + barf("timedWaitCondition: error %" FMT_Word, (StgWord) GetLastError()); + } } void |