X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=blobdiff_plain;f=src%2Fthread%2Fsem_open.c;h=d8d68392add362538a2c5c619db56c9792faba0c;hp=6fff71a8512090eb588bb0329e30a51917ca8242;hb=8c0a3d9e5c169fc9d0f246ab59362b658b029ad7;hpb=81af503610761a69476a3adbe8341fa8b6d078aa diff --git a/src/thread/sem_open.c b/src/thread/sem_open.c index 6fff71a8..d8d68392 100644 --- a/src/thread/sem_open.c +++ b/src/thread/sem_open.c @@ -93,14 +93,14 @@ 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); close(tfd); unlink(tmp); } - if (fstat(fd, &st) < 0) { + if (fd >= 0 && fstat(fd, &st) < 0) { close(fd); fd = -1; } @@ -118,6 +118,10 @@ sem_t *sem_open(const char *name, int flags, ...) break; } } + if (!(flags & O_CREAT)) { + pthread_spin_unlock(&lock); + return SEM_FAILED; + } if (!linkat(AT_FDCWD, tmp, dir, name, 0)) { fd = tfd; close(dir);