From d9bad66cbb8823ad786ac480330db1c05e85557a Mon Sep 17 00:00:00 2001 From: rpj Date: Tue, 30 Jul 2002 17:18:25 +0000 Subject: * pthread_cond_wait.c (ptw32_cond_wait_cleanup): Remove code designed to avoid/prevent spurious wakeup problems. It is believed that the sem_timedwait() call is consuming a CV signal that it shouldn't and this is breaking the avoidance logic. --- sem_getvalue.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'sem_getvalue.c') diff --git a/sem_getvalue.c b/sem_getvalue.c index 9d37c38..4e0402f 100644 --- a/sem_getvalue.c +++ b/sem_getvalue.c @@ -84,10 +84,13 @@ sem_getvalue(sem_t * sem, int * sval) } else { - + register sem_t s = *sem; + #ifdef NEED_SEM - result = ENOSYS; + EnterCriticalSection(&s->sem_lock_cs); + value = s->value; + LeaveCriticalSection(&s->sem_lock_cs); #else @@ -121,7 +124,7 @@ sem_getvalue(sem_t * sem, int * sval) * decrement/increment it inside of sem_wait() and sem_post() * etc using the Interlocked* functions. */ - if ( WaitForSingleObject( (*sem)->sem, 0 ) == WAIT_TIMEOUT ) + if ( WaitForSingleObject( s->sem, 0 ) == WAIT_TIMEOUT ) { /* Failed - must be zero */ value = 0; @@ -129,7 +132,7 @@ sem_getvalue(sem_t * sem, int * sval) else { /* Decremented semaphore - release it and note the value */ - (void) ReleaseSemaphore( (*sem)->sem, 1L, &value); + (void) ReleaseSemaphore( s->sem, 1L, &value); value++; } -- cgit v1.2.3