diff options
author | deischen <deischen@FreeBSD.org> | 2004-02-06 13:54:38 +0000 |
---|---|---|
committer | deischen <deischen@FreeBSD.org> | 2004-02-06 13:54:38 +0000 |
commit | f8f3e115d3c8253de677f6e7c78831b8ec18fab2 (patch) | |
tree | 3318baa6f9845a4c7636a24e7b16dd95ed243faa /lib | |
parent | 3ef89b60eb5cca46cd4edbfa293ed9dde61fdc5a (diff) | |
download | FreeBSD-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.c | 3 |
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); |