From 682a0f271f8b9a5842679a0f7070139a1f456c0d Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Thu, 10 Mar 2011 22:05:16 -0500 Subject: fix failure behavior of sem_open when sem does not exist --- src/thread/sem_open.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src') 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); -- cgit v1.2.1