Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/lib/libpthread Use pthread_condattr_t and pthread_cond_t mag...
details: https://anonhg.NetBSD.org/src/rev/dc4cb924a9df
branches: trunk
changeset: 1006864:dc4cb924a9df
user: kamil <kamil%NetBSD.org@localhost>
date: Wed Jan 29 15:07:46 2020 +0000
description:
Use pthread_condattr_t and pthread_cond_t magic fields
Validate _PT_CONDATTR_MAGIC and _PT_COND_MAGIC respectively.
diffstat:
lib/libpthread/pthread_cond.c | 34 ++++++++++++++++++++++++++--------
1 files changed, 26 insertions(+), 8 deletions(-)
diffs (111 lines):
diff -r 761157a2bdde -r dc4cb924a9df lib/libpthread/pthread_cond.c
--- a/lib/libpthread/pthread_cond.c Wed Jan 29 15:00:39 2020 +0000
+++ b/lib/libpthread/pthread_cond.c Wed Jan 29 15:07:46 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pthread_cond.c,v 1.66 2020/01/13 18:22:56 ad Exp $ */
+/* $NetBSD: pthread_cond.c,v 1.67 2020/01/29 15:07:46 kamil Exp $ */
/*-
* Copyright (c) 2001, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: pthread_cond.c,v 1.66 2020/01/13 18:22:56 ad Exp $");
+__RCSID("$NetBSD: pthread_cond.c,v 1.67 2020/01/29 15:07:46 kamil Exp $");
#include <stdlib.h>
#include <errno.h>
@@ -78,6 +78,10 @@
static clockid_t
pthread_cond_getclock(const pthread_cond_t *cond)
{
+
+ pthread__error(EINVAL, "Invalid condition variable",
+ cond->ptc_magic == _PT_COND_MAGIC);
+
return cond->ptc_private ?
*(clockid_t *)cond->ptc_private : CLOCK_REALTIME;
}
@@ -222,9 +226,6 @@
pthread_mutex_t *mutex;
lwpid_t lid;
- pthread__error(EINVAL, "Invalid condition variable",
- cond->ptc_magic == _PT_COND_MAGIC);
-
/*
* Pull the first thread off the queue. If the current thread
* is associated with the condition variable, remove it without
@@ -278,6 +279,9 @@
if (__predict_false(__uselibcstub))
return __libc_cond_signal_stub(cond);
+ pthread__error(EINVAL, "Invalid condition variable",
+ cond->ptc_magic == _PT_COND_MAGIC);
+
if (__predict_true(PTQ_EMPTY(&cond->ptc_waiters)))
return 0;
return pthread__cond_wake_one(cond);
@@ -291,9 +295,6 @@
u_int max;
size_t nwaiters;
- pthread__error(EINVAL, "Invalid condition variable",
- cond->ptc_magic == _PT_COND_MAGIC);
-
/*
* Try to defer waking threads (see pthread_cond_signal()).
* Only transfer waiters for which there is no pending wakeup.
@@ -328,6 +329,9 @@
if (__predict_false(__uselibcstub))
return __libc_cond_broadcast_stub(cond);
+ pthread__error(EINVAL, "Invalid condition variable",
+ cond->ptc_magic == _PT_COND_MAGIC);
+
if (__predict_true(PTQ_EMPTY(&cond->ptc_waiters)))
return 0;
return pthread__cond_wake_all(cond);
@@ -353,6 +357,10 @@
int
pthread_condattr_setclock(pthread_condattr_t *attr, clockid_t clck)
{
+
+ pthread__error(EINVAL, "Invalid condition variable attribute",
+ attr->ptca_magic == _PT_CONDATTR_MAGIC);
+
switch (clck) {
case CLOCK_MONOTONIC:
case CLOCK_REALTIME:
@@ -371,6 +379,10 @@
pthread_condattr_getclock(const pthread_condattr_t *__restrict attr,
clockid_t *__restrict clock_id)
{
+
+ pthread__error(EINVAL, "Invalid condition variable attribute",
+ attr->ptca_magic == _PT_CONDATTR_MAGIC);
+
if (attr == NULL || attr->ptca_private == NULL)
return EINVAL;
*clock_id = *(clockid_t *)attr->ptca_private;
@@ -396,6 +408,9 @@
int * __restrict pshared)
{
+ pthread__error(EINVAL, "Invalid condition variable attribute",
+ attr->ptca_magic == _PT_CONDATTR_MAGIC);
+
*pshared = PTHREAD_PROCESS_PRIVATE;
return 0;
}
@@ -404,6 +419,9 @@
pthread_condattr_setpshared(pthread_condattr_t *attr, int pshared)
{
+ pthread__error(EINVAL, "Invalid condition variable attribute",
+ attr->ptca_magic == _PT_CONDATTR_MAGIC);
+
switch(pshared) {
case PTHREAD_PROCESS_PRIVATE:
return 0;
Home |
Main Index |
Thread Index |
Old Index