From 045278e11b53fc1ad59945427feab1cd9275988f Mon Sep 17 00:00:00 2001 From: rpj Date: Fri, 22 Oct 2004 15:06:41 +0000 Subject: Changes to mutexes and semaphores - considered alpha for now --- sem_post.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'sem_post.c') diff --git a/sem_post.c b/sem_post.c index 7e20659..5b678c6 100644 --- a/sem_post.c +++ b/sem_post.c @@ -73,8 +73,11 @@ sem_post (sem_t * sem) */ { int result = 0; +#ifndef NEED_SEM + sem_t s = *sem; +#endif - if (sem == NULL || *sem == NULL) + if (s == NULL) { result = EINVAL; } @@ -82,18 +85,25 @@ sem_post (sem_t * sem) #ifdef NEED_SEM else if (!ptw32_increase_semaphore (sem, 1)) + { + result = EINVAL; + } #else /* NEED_SEM */ - else if (InterlockedIncrement((LPLONG) &(*sem)->value) <= 0 - && !ReleaseSemaphore((*sem)->sem, 1, NULL)) - -#endif /* NEED_SEM */ - + else if ((result = pthread_mutex_lock (&s->lock)) == 0) { - result = EINVAL; + if (++s->value <= 0 + && !ReleaseSemaphore (s->sem, 1, NULL)) + { + result = EINVAL; + } + + (void) pthread_mutex_unlock (&s->lock); } +#endif /* NEED_SEM */ + if (result != 0) { errno = result; -- cgit v1.2.3