diff options
author | davidxu <davidxu@FreeBSD.org> | 2010-01-18 10:29:04 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2010-01-18 10:29:04 +0000 |
commit | 553c4a5e4f365e0af1a88fb033ffdac2fe4c4f0b (patch) | |
tree | 737c0b8bab05c316d19196d005a7a15ce4ae808d /lib | |
parent | 630da6fd8a0f711d519e37a59877d72fce80412c (diff) | |
download | FreeBSD-src-553c4a5e4f365e0af1a88fb033ffdac2fe4c4f0b.zip FreeBSD-src-553c4a5e4f365e0af1a88fb033ffdac2fe4c4f0b.tar.gz |
preserve errno when processing error cases.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/gen/sem_new.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/libc/gen/sem_new.c b/lib/libc/gen/sem_new.c index f513973..ef4ba68 100644 --- a/lib/libc/gen/sem_new.c +++ b/lib/libc/gen/sem_new.c @@ -142,7 +142,7 @@ _sem_open(const char *name, int flags, ...) va_list ap; struct sem_nameinfo *ni = NULL; sem_t *sem = NULL; - int fd = -1, mode, len; + int fd = -1, mode, len, errsave; int value = 0; if (name[0] != '/') { @@ -233,12 +233,14 @@ _sem_open(const char *name, int flags, ...) return (sem); error: + errsave = errno; _pthread_mutex_unlock(&sem_llock); if (fd != -1) _close(fd); if (sem != NULL) munmap(sem, sizeof(sem_t)); free(ni); + errno = errsave; return (SEM_FAILED); } |