diff options
author | davidxu <davidxu@FreeBSD.org> | 2010-01-07 04:15:49 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2010-01-07 04:15:49 +0000 |
commit | d206161359d96c0b5fb300d4243de94c7c0780eb (patch) | |
tree | d58026e71ef9584da7db5a53883880b547ea3279 /lib/libc/gen/sem_new.c | |
parent | be64a18fd40f19e9ee4ce795336fefb0c9996d1d (diff) | |
download | FreeBSD-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.c | 4 |
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); |