Module Name:    src
Committed By:   kamil
Date:           Wed Jan 29 14:41:57 UTC 2020

Modified Files:
        src/lib/libpthread: pthread_barrier.c

Log Message:
Use pthread_barrierattr_t and pthread_barrier_t magic fields

Set respectively _PT_BARRIER_DEAD for pthread_barrier_destroy() and
_PT_BARRIERATTR_DEAD for pthread_barrierattr_destroy().

Validate _PT_BARRIER_MAGIC in pthread_barrier_t and _PT_BARRIERATTR_MAGIC
in pthread_barrierattr_t accordingly.


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/lib/libpthread/pthread_barrier.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_barrier.c
diff -u src/lib/libpthread/pthread_barrier.c:1.20 src/lib/libpthread/pthread_barrier.c:1.21
--- src/lib/libpthread/pthread_barrier.c:1.20	Sun Jul  3 14:24:58 2016
+++ src/lib/libpthread/pthread_barrier.c	Wed Jan 29 14:41:57 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pthread_barrier.c,v 1.20 2016/07/03 14:24:58 christos Exp $	*/
+/*	$NetBSD: pthread_barrier.c,v 1.21 2020/01/29 14:41:57 kamil Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2003, 2006, 2007, 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: pthread_barrier.c,v 1.20 2016/07/03 14:24:58 christos Exp $");
+__RCSID("$NetBSD: pthread_barrier.c,v 1.21 2020/01/29 14:41:57 kamil Exp $");
 
 #include <errno.h>
 
@@ -41,9 +41,9 @@ int
 pthread_barrier_init(pthread_barrier_t *barrier,
 		     const pthread_barrierattr_t *attr, unsigned int count)
 {
-	
-	if (attr != NULL && attr->ptba_magic != _PT_BARRIERATTR_MAGIC)
-		return EINVAL;
+
+	pthread__error(EINVAL, "Invalid barrier attribute",
+	    attr == NULL || attr->ptba_magic == _PT_BARRIERATTR_MAGIC);
 	if (count == 0)
 		return EINVAL;
 
@@ -59,10 +59,13 @@ int
 pthread_barrier_destroy(pthread_barrier_t *barrier)
 {
 
-	if (barrier->ptb_magic != _PT_BARRIER_MAGIC)
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid barrier",
+	    barrier->ptb_magic == _PT_BARRIER_MAGIC);
 	if (barrier->ptb_curcount != 0)
 		return EBUSY;
+
+	barrier->ptb_magic = _PT_BARRIER_DEAD;
+
 	return 0;
 }
 
@@ -73,8 +76,8 @@ pthread_barrier_wait(pthread_barrier_t *
 	pthread_t self;
 	unsigned int gen;
 
-	if (barrier->ptb_magic != _PT_BARRIER_MAGIC)
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid barrier",
+	    barrier->ptb_magic == _PT_BARRIER_MAGIC);
 
 	/*
 	 * A single arbitrary thread is supposed to return
@@ -123,6 +126,9 @@ pthread_barrierattr_getpshared(const pth
     int * __restrict pshared)
 {
 
+	pthread__error(EINVAL, "Invalid barrier attribute",
+	    attr->ptba_magic == _PT_BARRIERATTR_MAGIC);
+
 	*pshared = PTHREAD_PROCESS_PRIVATE;
 	return 0;
 }
@@ -131,6 +137,9 @@ int
 pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared)
 {
 
+	pthread__error(EINVAL, "Invalid barrier attribute",
+	    attr->ptba_magic == _PT_BARRIERATTR_MAGIC);
+
 	switch(pshared) {
 	case PTHREAD_PROCESS_PRIVATE:
 		return 0;
@@ -153,8 +162,8 @@ int
 pthread_barrierattr_destroy(pthread_barrierattr_t *attr)
 {
 
-	if (attr->ptba_magic != _PT_BARRIERATTR_MAGIC)
-		return EINVAL;
+	pthread__error(EINVAL, "Invalid barrier attribute",
+	    attr->ptba_magic == _PT_BARRIERATTR_MAGIC);
 	attr->ptba_magic = _PT_BARRIERATTR_DEAD;
 	return 0;
 }

Reply via email to