summaryrefslogtreecommitdiff
path: root/condvar.c
diff options
context:
space:
mode:
Diffstat (limited to 'condvar.c')
-rw-r--r--condvar.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/condvar.c b/condvar.c
index a77b56a..c1f192c 100644
--- a/condvar.c
+++ b/condvar.c
@@ -827,8 +827,6 @@ pthread_cond_broadcast (pthread_cond_t * cond)
cv = *cond;
- cv->wasBroadcast = TRUE;
-
/*
* No-op if the CV is static and hasn't been initialised yet.
*/
@@ -837,13 +835,14 @@ pthread_cond_broadcast (pthread_cond_t * cond)
return 0;
}
+ cv->wasBroadcast = TRUE;
+
/*
* Wake up all waiters
*/
- for (i = cv->waiters; i > 0 && result == 0; i--)
- {
- result = sem_post (&(cv->sema));
- }
+ result = (ReleaseSemaphore( cv->sema, cond->waiters, NULL )
+ ? 0
+ : EINVAL);
if (cv->waiters > 0 && result == 0)
{
@@ -851,7 +850,7 @@ pthread_cond_broadcast (pthread_cond_t * cond)
* Wait for all the awakened threads to acquire their part of
* the counting semaphore
*/
- if (WaitForSingleObject (cv->waitersDone, INFINITE) !=
+ if (WaitForSingleObject (cv->waitersDone, INFINITE) ==
WAIT_OBJECT_0)
{
result = 0;