diff options
author | jilles <jilles@FreeBSD.org> | 2015-01-28 22:42:56 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2015-01-28 22:42:56 +0000 |
commit | 1fd46ffae3876ef73b20c70d78016b18be7cc141 (patch) | |
tree | cf71fcbde358d8345475773b6d3ed5b6aaa6b3fa /lib/libc | |
parent | f7310af2cc0ef7e605de1c75f2a0ad8d6a1eddfb (diff) | |
download | FreeBSD-src-1fd46ffae3876ef73b20c70d78016b18be7cc141.zip FreeBSD-src-1fd46ffae3876ef73b20c70d78016b18be7cc141.tar.gz |
sem_post(): Fix and document semaphore value overflow error.
The error code is per Austin Group issue #315.
I provided different wording for the manual page change.
Submitted by: pluknet
MFC after: 1 week
Diffstat (limited to 'lib/libc')
-rw-r--r-- | lib/libc/gen/sem_new.c | 6 | ||||
-rw-r--r-- | lib/libc/gen/sem_post.3 | 5 |
2 files changed, 8 insertions, 3 deletions
diff --git a/lib/libc/gen/sem_new.c b/lib/libc/gen/sem_new.c index 3ee0272..c5dc7e7 100644 --- a/lib/libc/gen/sem_new.c +++ b/lib/libc/gen/sem_new.c @@ -439,8 +439,10 @@ _sem_post(sem_t *sem) do { count = sem->_kern._count; - if (USEM_COUNT(count) + 1 > SEM_VALUE_MAX) - return (EOVERFLOW); + if (USEM_COUNT(count) + 1 > SEM_VALUE_MAX) { + errno = EOVERFLOW; + return (-1); + } } while (!atomic_cmpset_rel_int(&sem->_kern._count, count, count + 1)); if (count & USEM_HAS_WAITERS) usem_wake(&sem->_kern); diff --git a/lib/libc/gen/sem_post.3 b/lib/libc/gen/sem_post.3 index 485d2fc..dea8eb6 100644 --- a/lib/libc/gen/sem_post.3 +++ b/lib/libc/gen/sem_post.3 @@ -27,7 +27,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 15, 2000 +.Dd January 28, 2015 .Dt SEM_POST 3 .Os .Sh NAME @@ -65,6 +65,9 @@ The .Fa sem argument points to an invalid semaphore. +.It Bq Er EOVERFLOW +The semaphore value would exceed +.Dv SEM_VALUE_MAX . .El .Sh SEE ALSO .Xr sem_getvalue 3 , |