Module Name:    src
Committed By:   kamil
Date:           Fri Jan 31 17:52:15 UTC 2020

Modified Files:
        src/lib/libpthread: pthread_mutex.c pthread_rwlock.c pthread_spin.c

Log Message:
Refactor libpthread checks for invalid arguments

Switch from manual functions to pthread__error().


To generate a diff of this commit:
cvs rdiff -u -r1.71 -r1.72 src/lib/libpthread/pthread_mutex.c
cvs rdiff -u -r1.37 -r1.38 src/lib/libpthread/pthread_rwlock.c
cvs rdiff -u -r1.6 -r1.7 src/lib/libpthread/pthread_spin.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/libpthread/pthread_mutex.c
diff -u src/lib/libpthread/pthread_mutex.c:1.71 src/lib/libpthread/pthread_mutex.c:1.72
--- src/lib/libpthread/pthread_mutex.c:1.71	Fri Jan 31 02:37:46 2020
+++ src/lib/libpthread/pthread_mutex.c	Fri Jan 31 17:52:14 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pthread_mutex.c,v 1.71 2020/01/31 02:37:46 christos Exp $	*/
+/*	$NetBSD: pthread_mutex.c,v 1.72 2020/01/31 17:52:14 kamil Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2003, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -47,7 +47,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: pthread_mutex.c,v 1.71 2020/01/31 02:37:46 christos Exp $");
+__RCSID("$NetBSD: pthread_mutex.c,v 1.72 2020/01/31 17:52:14 kamil Exp $");
 
 #include <sys/types.h>
 #include <sys/lwpctl.h>
@@ -131,6 +131,9 @@ pthread_mutex_init(pthread_mutex_t *ptm,
 		return __libc_mutex_init_stub(ptm, attr);
 #endif
 
+	pthread__error(EINVAL, "Invalid mutes attribute",
+	    attr == NULL || attr->ptma_magic == _PT_MUTEXATTR_MAGIC);
+
 	if (attr == NULL) {
 		type = PTHREAD_MUTEX_NORMAL;
 		proto = PTHREAD_PRIO_NONE;

Index: src/lib/libpthread/pthread_rwlock.c
diff -u src/lib/libpthread/pthread_rwlock.c:1.37 src/lib/libpthread/pthread_rwlock.c:1.38
--- src/lib/libpthread/pthread_rwlock.c:1.37	Mon Jan 13 18:22:56 2020
+++ src/lib/libpthread/pthread_rwlock.c	Fri Jan 31 17:52:14 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pthread_rwlock.c,v 1.37 2020/01/13 18:22:56 ad Exp $ */
+/*	$NetBSD: pthread_rwlock.c,v 1.38 2020/01/31 17:52:14 kamil Exp $ */
 
 /*-
  * Copyright (c) 2002, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: pthread_rwlock.c,v 1.37 2020/01/13 18:22:56 ad Exp $");
+__RCSID("$NetBSD: pthread_rwlock.c,v 1.38 2020/01/31 17:52:14 kamil Exp $");
 
 #include <sys/types.h>
 #include <sys/lwpctl.h>
@@ -91,8 +91,9 @@ pthread_rwlock_init(pthread_rwlock_t *pt
 	if (__predict_false(__uselibcstub))
 		return __libc_rwlock_init_stub(ptr, attr);
 
-	if (attr && (attr->ptra_magic != _PT_RWLOCKATTR_MAGIC))
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid rwlock attribute",
+	    attr == NULL || attr->ptra_magic == _PT_RWLOCKATTR_MAGIC);
+
 	ptr->ptr_magic = _PT_RWLOCK_MAGIC;
 	PTQ_INIT(&ptr->ptr_rblocked);
 	PTQ_INIT(&ptr->ptr_wblocked);
@@ -109,8 +110,10 @@ pthread_rwlock_destroy(pthread_rwlock_t 
 	if (__predict_false(__uselibcstub))
 		return __libc_rwlock_destroy_stub(ptr);
 
-	if ((ptr->ptr_magic != _PT_RWLOCK_MAGIC) ||
-	    (!PTQ_EMPTY(&ptr->ptr_rblocked)) ||
+	pthread__error(EINVAL, "Invalid rwlock",
+	    ptr->ptr_magic == _PT_RWLOCK_MAGIC);
+
+	if ((!PTQ_EMPTY(&ptr->ptr_rblocked)) ||
 	    (!PTQ_EMPTY(&ptr->ptr_wblocked)) ||
 	    (ptr->ptr_nreaders != 0) ||
 	    (ptr->ptr_owner != NULL))
@@ -156,8 +159,8 @@ pthread__rwlock_rdlock(pthread_rwlock_t 
 	int error;
 
 #ifdef ERRORCHECK
-	if (ptr->ptr_magic != _PT_RWLOCK_MAGIC)
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid rwlock",
+	    ptr->ptr_magic == _PT_RWLOCK_MAGIC);
 #endif
 
 	for (owner = (uintptr_t)ptr->ptr_owner;; owner = next) {
@@ -246,8 +249,8 @@ pthread_rwlock_tryrdlock(pthread_rwlock_
 		return __libc_rwlock_tryrdlock_stub(ptr);
 
 #ifdef ERRORCHECK
-	if (ptr->ptr_magic != _PT_RWLOCK_MAGIC)
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid rwlock",
+	    ptr->ptr_magic == _PT_RWLOCK_MAGIC);
 #endif
 
 	/*
@@ -281,8 +284,8 @@ pthread__rwlock_wrlock(pthread_rwlock_t 
 	_DIAGASSERT(((uintptr_t)self & RW_FLAGMASK) == 0);
 
 #ifdef ERRORCHECK
-	if (ptr->ptr_magic != _PT_RWLOCK_MAGIC)
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid rwlock",
+	    ptr->ptr_magic == _PT_RWLOCK_MAGIC);
 #endif
 
 	for (owner = (uintptr_t)ptr->ptr_owner;; owner = next) {
@@ -372,8 +375,8 @@ pthread_rwlock_trywrlock(pthread_rwlock_
 		return __libc_rwlock_trywrlock_stub(ptr);
 
 #ifdef ERRORCHECK
-	if (ptr->ptr_magic != _PT_RWLOCK_MAGIC)
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid rwlock",
+	    ptr->ptr_magic == _PT_RWLOCK_MAGIC);
 #endif
 
 	self = pthread__self();
@@ -451,8 +454,8 @@ pthread_rwlock_unlock(pthread_rwlock_t *
 		return __libc_rwlock_unlock_stub(ptr);
 
 #ifdef ERRORCHECK
-	if ((ptr == NULL) || (ptr->ptr_magic != _PT_RWLOCK_MAGIC))
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid rwlock",
+	    ptr->ptr_magic == _PT_RWLOCK_MAGIC);
 #endif
 
 #ifndef PTHREAD__ATOMIC_IS_MEMBAR
@@ -650,6 +653,10 @@ int
 pthread_rwlockattr_getpshared(const pthread_rwlockattr_t * __restrict attr,
     int * __restrict pshared)
 {
+
+	pthread__error(EINVAL, "Invalid rwlock attribute",
+	    ptr->ptra_magic == _PT_RWLOCKATTR_MAGIC);
+
 	*pshared = PTHREAD_PROCESS_PRIVATE;
 	return 0;
 }
@@ -658,6 +665,9 @@ int
 pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int pshared)
 {
 
+	pthread__error(EINVAL, "Invalid rwlock attribute",
+	    ptr->ptra_magic == _PT_RWLOCKATTR_MAGIC);
+
 	switch(pshared) {
 	case PTHREAD_PROCESS_PRIVATE:
 		return 0;
@@ -684,9 +694,9 @@ int
 pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr)
 {
 
-	if ((attr == NULL) ||
-	    (attr->ptra_magic != _PT_RWLOCKATTR_MAGIC))
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid rwlock attribute",
+	    attr->ptra_magic == _PT_RWLOCKATTR_MAGIC);
+
 	attr->ptra_magic = _PT_RWLOCKATTR_DEAD;
 
 	return 0;

Index: src/lib/libpthread/pthread_spin.c
diff -u src/lib/libpthread/pthread_spin.c:1.6 src/lib/libpthread/pthread_spin.c:1.7
--- src/lib/libpthread/pthread_spin.c:1.6	Thu Aug 16 04:49:47 2012
+++ src/lib/libpthread/pthread_spin.c	Fri Jan 31 17:52:14 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pthread_spin.c,v 1.6 2012/08/16 04:49:47 matt Exp $	*/
+/*	$NetBSD: pthread_spin.c,v 1.7 2020/01/31 17:52:14 kamil Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2006, 2007 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: pthread_spin.c,v 1.6 2012/08/16 04:49:47 matt Exp $");
+__RCSID("$NetBSD: pthread_spin.c,v 1.7 2020/01/31 17:52:14 kamil Exp $");
 
 #include <sys/types.h>
 #include <sys/ras.h>
@@ -54,9 +54,9 @@ pthread_spin_init(pthread_spinlock_t *lo
 {
 
 #ifdef ERRORCHECK
-	if (lock == NULL || (pshared != PTHREAD_PROCESS_PRIVATE &&
-	    pshared != PTHREAD_PROCESS_SHARED))
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid pshared",
+	    pshared == PTHREAD_PROCESS_PRIVATE ||
+	    pshared == PTHREAD_PROCESS_SHARED);
 #endif
 	lock->pts_magic = _PT_SPINLOCK_MAGIC;
 
@@ -76,8 +76,9 @@ pthread_spin_destroy(pthread_spinlock_t 
 {
 
 #ifdef ERRORCHECK
-	if (lock == NULL || lock->pts_magic != _PT_SPINLOCK_MAGIC)
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid spinlock",
+	    lock->pts_magic == _PT_SPINLOCK_MAGIC);
+
 	if (!__SIMPLELOCK_UNLOCKED_P(&lock->pts_spin))
 		return EBUSY;
 #endif
@@ -93,8 +94,8 @@ pthread_spin_lock(pthread_spinlock_t *lo
 	pthread_t self;
 
 #ifdef ERRORCHECK
-	if (lock == NULL || lock->pts_magic != _PT_SPINLOCK_MAGIC)
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid spinlock",
+	    lock->pts_magic == _PT_SPINLOCK_MAGIC);
 #endif
 
 	self = pthread__self();
@@ -111,8 +112,8 @@ pthread_spin_trylock(pthread_spinlock_t 
 	pthread_t self;
 
 #ifdef ERRORCHECK
-	if (lock == NULL || lock->pts_magic != _PT_SPINLOCK_MAGIC)
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid spinlock",
+	    lock->pts_magic == _PT_SPINLOCK_MAGIC);
 #endif
 
 	self = pthread__self();
@@ -127,8 +128,8 @@ pthread_spin_unlock(pthread_spinlock_t *
 	pthread_t self;
 
 #ifdef ERRORCHECK
-	if (lock == NULL || lock->pts_magic != _PT_SPINLOCK_MAGIC)
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid spinlock",
+	    lock->pts_magic == _PT_SPINLOCK_MAGIC);
 #endif
 
 	self = pthread__self();

Reply via email to