X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2Fsem_open.c;h=2e900eb3a2dc0e393d9c712c6ac460d323a29609;hb=f2d08cf7558176af7ef36cf5b5213e676b02d7ac;hp=809925d25a7a38834dc7bde773611507d809b930;hpb=682a0f271f8b9a5842679a0f7070139a1f456c0d;p=musl diff --git a/src/thread/sem_open.c b/src/thread/sem_open.c index 809925d2..2e900eb3 100644 --- a/src/thread/sem_open.c +++ b/src/thread/sem_open.c @@ -71,13 +71,13 @@ sem_t *sem_open(const char *name, int flags, ...) errno = EINVAL; return SEM_FAILED; } - sem_init(&newsem, 0, value); + sem_init(&newsem, 1, value); clock_gettime(CLOCK_REALTIME, &ts); snprintf(tmp, sizeof(tmp), "/dev/shm/%p-%p-%d-%d", &name, name, (int)getpid(), (int)ts.tv_nsec); - tfd = open(tmp, O_CREAT|O_EXCL|O_RDWR, mode); + tfd = open(tmp, O_CREAT|O_EXCL|O_RDWR|O_CLOEXEC, mode); if (tfd<0) return SEM_FAILED; - dir = open("/dev/shm", O_DIRECTORY|O_RDONLY); + dir = open("/dev/shm", O_DIRECTORY|O_RDONLY|O_CLOEXEC); if (dir<0 || write(tfd,&newsem,sizeof newsem)!=sizeof newsem) { if (dir >= 0) close(dir); close(tfd); @@ -93,7 +93,7 @@ sem_t *sem_open(const char *name, int flags, ...) for (;;) { if (!(flags & O_EXCL)) { - fd = shm_open(name, flags&~O_CREAT, mode); + fd = shm_open(name, flags&~O_CREAT, 0); if (fd >= 0 || errno != ENOENT) { if (flags & O_CREAT) { close(dir);