summaryrefslogtreecommitdiffstats
path: root/lib/libc/gen/sem_new.c
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2010-01-07 04:15:49 +0000
committerdavidxu <davidxu@FreeBSD.org>2010-01-07 04:15:49 +0000
commitd206161359d96c0b5fb300d4243de94c7c0780eb (patch)
treed58026e71ef9584da7db5a53883880b547ea3279 /lib/libc/gen/sem_new.c
parentbe64a18fd40f19e9ee4ce795336fefb0c9996d1d (diff)
downloadFreeBSD-src-d206161359d96c0b5fb300d4243de94c7c0780eb.zip
FreeBSD-src-d206161359d96c0b5fb300d4243de94c7c0780eb.tar.gz
Don't forget to use fourth argument if O_CREAT is set in argument oflag.
The fourth specifies initial value for the semaphore.
Diffstat (limited to 'lib/libc/gen/sem_new.c')
-rw-r--r--lib/libc/gen/sem_new.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/libc/gen/sem_new.c b/lib/libc/gen/sem_new.c
index dbaf6e1..a4bb4f3 100644
--- a/lib/libc/gen/sem_new.c
+++ b/lib/libc/gen/sem_new.c
@@ -143,6 +143,7 @@ _sem_open(const char *name, int flags, ...)
struct sem_nameinfo *ni = NULL;
sem_t *sem = NULL;
int fd = -1, mode, len;
+ int value = 0;
if (name[0] != '/') {
errno = EINVAL;
@@ -170,6 +171,7 @@ _sem_open(const char *name, int flags, ...)
if (flags & O_CREAT) {
va_start(ap, flags);
mode = va_arg(ap, int);
+ value = va_arg(ap, int);
va_end(ap);
}
@@ -203,7 +205,7 @@ _sem_open(const char *name, int flags, ...)
tmp._magic = SEM_MAGIC;
tmp._kern._has_waiters = 0;
- tmp._kern._count = 0;
+ tmp._kern._count = value;
tmp._kern._flags = USYNC_PROCESS_SHARED | SEM_NAMED;
if (_write(fd, &tmp, sizeof(tmp)) != sizeof(tmp)) {
flock(fd, LOCK_UN);
OpenPOWER on IntegriCloud