summaryrefslogtreecommitdiff
path: root/src/thread/sem_open.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread/sem_open.c')
-rw-r--r--src/thread/sem_open.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/thread/sem_open.c b/src/thread/sem_open.c
index 6fff71a8..809925d2 100644
--- a/src/thread/sem_open.c
+++ b/src/thread/sem_open.c
@@ -100,7 +100,7 @@ sem_t *sem_open(const char *name, int flags, ...)
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);