summaryrefslogtreecommitdiff
path: root/rts/win32/OSThreads.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/win32/OSThreads.c')
-rw-r--r--rts/win32/OSThreads.c21
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