fix failure behavior of sem_open when sem does not exist

This commit is contained in:
Rich Felker 2011-03-10 22:05:16 -05:00
parent cfe581b6bc
commit 682a0f271f
1 changed files with 5 additions and 1 deletions

View File

@ -100,7 +100,7 @@ sem_t *sem_open(const char *name, int flags, ...)
close(tfd); close(tfd);
unlink(tmp); unlink(tmp);
} }
if (fstat(fd, &st) < 0) { if (fd >= 0 && fstat(fd, &st) < 0) {
close(fd); close(fd);
fd = -1; fd = -1;
} }
@ -118,6 +118,10 @@ sem_t *sem_open(const char *name, int flags, ...)
break; break;
} }
} }
if (!(flags & O_CREAT)) {
pthread_spin_unlock(&lock);
return SEM_FAILED;
}
if (!linkat(AT_FDCWD, tmp, dir, name, 0)) { if (!linkat(AT_FDCWD, tmp, dir, name, 0)) {
fd = tfd; fd = tfd;
close(dir); close(dir);