summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authordeischen <deischen@FreeBSD.org>2004-02-06 13:54:38 +0000
committerdeischen <deischen@FreeBSD.org>2004-02-06 13:54:38 +0000
commitf8f3e115d3c8253de677f6e7c78831b8ec18fab2 (patch)
tree3318baa6f9845a4c7636a24e7b16dd95ed243faa /lib
parent3ef89b60eb5cca46cd4edbfa293ed9dde61fdc5a (diff)
downloadFreeBSD-src-f8f3e115d3c8253de677f6e7c78831b8ec18fab2.zip
FreeBSD-src-f8f3e115d3c8253de677f6e7c78831b8ec18fab2.tar.gz
Only allow the semaphore to be taken when the value is positive.
Don't decrement it twice when it is taken. Reported by: kris
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/gen/sem.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/lib/libc/gen/sem.c b/lib/libc/gen/sem.c
index 34ea8f7..ec80bc3 100644
--- a/lib/libc/gen/sem.c
+++ b/lib/libc/gen/sem.c
@@ -304,14 +304,13 @@ __sem_trywait(sem_t *sem)
retval = ksem_trywait((*sem)->semid);
else {
_pthread_mutex_lock(&(*sem)->lock);
- if ((*sem)->count != 0) {
+ if ((*sem)->count > 0) {
(*sem)->count--;
retval = 0;
} else {
errno = EAGAIN;
retval = -1;
}
- (*sem)->count--;
_pthread_mutex_unlock(&(*sem)->lock);
}
return (retval);
OpenPOWER on IntegriCloud