Module Name:    src
Committed By:   joerg
Date:           Sat Mar 10 19:59:21 UTC 2012

Modified Files:
        src/lib/librt: sem.c

Log Message:
Keep in sync with libpthread: Fix error handling.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/lib/librt/sem.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/librt/sem.c
diff -u src/lib/librt/sem.c:1.6 src/lib/librt/sem.c:1.7
--- src/lib/librt/sem.c:1.6	Thu Mar  8 21:59:29 2012
+++ src/lib/librt/sem.c	Sat Mar 10 19:59:21 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: sem.c,v 1.6 2012/03/08 21:59:29 joerg Exp $	*/
+/*	$NetBSD: sem.c,v 1.7 2012/03/10 19:59:21 joerg Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -59,7 +59,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: sem.c,v 1.6 2012/03/08 21:59:29 joerg Exp $");
+__RCSID("$NetBSD: sem.c,v 1.7 2012/03/10 19:59:21 joerg Exp $");
 
 /*
  * If an application is linked against both librt and libpthread, the
@@ -163,6 +163,7 @@ sem_init(sem_t *sem, int pshared, unsign
 int
 sem_destroy(sem_t *sem)
 {
+	int error, save_errno;
 
 #ifdef ERRORCHECK
 	if (sem == NULL || *sem == NULL || (*sem)->ksem_magic != KSEM_MAGIC) {
@@ -171,12 +172,12 @@ sem_destroy(sem_t *sem)
 	}
 #endif
 
-	if (_ksem_destroy((*sem)->ksem_semid) == -1)
-		return (-1);
-
+	error = _ksem_destroy((*sem)->ksem_semid);
+	save_errno = errno;
 	sem_free(*sem);
+	errno = save_errno;
 
-	return (0);
+	return error;
 }
 
 sem_t *
@@ -241,6 +242,7 @@ sem_open(const char *name, int oflag, ..
 int
 sem_close(sem_t *sem)
 {
+	int error, save_errno;
 
 #ifdef ERRORCHECK
 	if (sem == NULL || *sem == NULL || (*sem)->ksem_magic != KSEM_MAGIC) {
@@ -249,13 +251,14 @@ sem_close(sem_t *sem)
 	}
 #endif
 
-	if (_ksem_close((*sem)->ksem_semid) == -1)
-		return (-1);
+	error = _ksem_close((*sem)->ksem_semid);
 
 	LIST_REMOVE((*sem), ksem_list);
+	save_errno = errno;
 	sem_free(*sem);
 	free(sem);
-	return (0);
+	errno = save_errno;
+	return error;
 }
 
 int

Reply via email to