Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libpthread Refactor libpthread checks for invalid arguments



details:   https://anonhg.NetBSD.org/src/rev/0fb174ba1b63
branches:  trunk
changeset: 1006930:0fb174ba1b63
user:      kamil <kamil%NetBSD.org@localhost>
date:      Fri Jan 31 17:52:14 2020 +0000

description:
Refactor libpthread checks for invalid arguments

Switch from manual functions to pthread__error().

diffstat:

 lib/libpthread/pthread_mutex.c  |   7 ++++-
 lib/libpthread/pthread_rwlock.c |  48 ++++++++++++++++++++++++----------------
 lib/libpthread/pthread_spin.c   |  27 +++++++++++-----------
 3 files changed, 48 insertions(+), 34 deletions(-)

diffs (236 lines):

diff -r ddba1d7e6583 -r 0fb174ba1b63 lib/libpthread/pthread_mutex.c
--- a/lib/libpthread/pthread_mutex.c    Fri Jan 31 14:01:36 2020 +0000
+++ b/lib/libpthread/pthread_mutex.c    Fri Jan 31 17:52:14 2020 +0000
@@ -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 @@
                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;
diff -r ddba1d7e6583 -r 0fb174ba1b63 lib/libpthread/pthread_rwlock.c
--- a/lib/libpthread/pthread_rwlock.c   Fri Jan 31 14:01:36 2020 +0000
+++ b/lib/libpthread/pthread_rwlock.c   Fri Jan 31 17:52:14 2020 +0000
@@ -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 @@
        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 @@
        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 @@
        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 @@
                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 @@
        _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 @@
                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 @@
                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 @@
 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 @@
 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 @@
 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;
diff -r ddba1d7e6583 -r 0fb174ba1b63 lib/libpthread/pthread_spin.c
--- a/lib/libpthread/pthread_spin.c     Fri Jan 31 14:01:36 2020 +0000
+++ b/lib/libpthread/pthread_spin.c     Fri Jan 31 17:52:14 2020 +0000
@@ -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 @@
 {
 
 #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 @@
 {
 
 #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_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_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_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();



Home | Main Index | Thread Index | Old Index