summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2010-01-18 10:29:04 +0000
committerdavidxu <davidxu@FreeBSD.org>2010-01-18 10:29:04 +0000
commit553c4a5e4f365e0af1a88fb033ffdac2fe4c4f0b (patch)
tree737c0b8bab05c316d19196d005a7a15ce4ae808d /lib
parent630da6fd8a0f711d519e37a59877d72fce80412c (diff)
downloadFreeBSD-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.c4
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);
}
OpenPOWER on IntegriCloud