From 62c912e15581e8d2dee9300b99e0532614f5c7e5 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 8 Sep 2017 13:10:24 +0200 Subject: posix: Use mutex object itself for condvar We should only use the address used to initialize the mutex object according to POSIX, "2.9.9 Synchronization Object Copies and Alternative Mappings". http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_09_09 Update #3113. --- cpukit/posix/include/rtems/posix/cond.h | 2 +- cpukit/posix/include/rtems/posix/condimpl.h | 2 +- cpukit/posix/src/condwaitsupp.c | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cpukit/posix/include/rtems/posix/cond.h b/cpukit/posix/include/rtems/posix/cond.h index bbb80ef362..52b9a59929 100644 --- a/cpukit/posix/include/rtems/posix/cond.h +++ b/cpukit/posix/include/rtems/posix/cond.h @@ -43,7 +43,7 @@ extern "C" { typedef struct { Objects_Control Object; Thread_queue_Control Wait_queue; - pthread_mutex_t mutex; + pthread_mutex_t *mutex; clockid_t clock; } POSIX_Condition_variables_Control; diff --git a/cpukit/posix/include/rtems/posix/condimpl.h b/cpukit/posix/include/rtems/posix/condimpl.h index b71b6f0eae..e9375c1075 100644 --- a/cpukit/posix/include/rtems/posix/condimpl.h +++ b/cpukit/posix/include/rtems/posix/condimpl.h @@ -31,7 +31,7 @@ extern "C" { * Constant to indicate condition variable does not currently have * a mutex assigned to it. */ -#define POSIX_CONDITION_VARIABLES_NO_MUTEX 0 +#define POSIX_CONDITION_VARIABLES_NO_MUTEX NULL #define POSIX_CONDITION_VARIABLES_TQ_OPERATIONS &_Thread_queue_Operations_FIFO diff --git a/cpukit/posix/src/condwaitsupp.c b/cpukit/posix/src/condwaitsupp.c index 589b5e2810..486bab879c 100644 --- a/cpukit/posix/src/condwaitsupp.c +++ b/cpukit/posix/src/condwaitsupp.c @@ -38,7 +38,7 @@ static void _POSIX_Condition_variables_Enqueue_callout( the_cond = POSIX_CONDITION_VARIABLE_OF_THREAD_QUEUE_QUEUE( queue ); - mutex_error = pthread_mutex_unlock( &the_cond->mutex ); + mutex_error = pthread_mutex_unlock( the_cond->mutex ); if ( mutex_error != 0 ) { /* * Historically, we ignored the unlock status since the behavior @@ -107,13 +107,13 @@ int _POSIX_Condition_variables_Wait_support( if ( the_cond->mutex != POSIX_CONDITION_VARIABLES_NO_MUTEX - && the_cond->mutex != *mutex + && the_cond->mutex != mutex ) { _POSIX_Condition_variables_Release( the_cond, &queue_context ); return EINVAL; } - the_cond->mutex = *mutex; + the_cond->mutex = mutex; executing = _Thread_Executing; if ( !already_timedout ) { @@ -135,7 +135,7 @@ int _POSIX_Condition_variables_Wait_support( } else { _POSIX_Condition_variables_Release( the_cond, &queue_context ); - mutex_error = pthread_mutex_unlock( &the_cond->mutex ); + mutex_error = pthread_mutex_unlock( the_cond->mutex ); if ( mutex_error != 0 ) { error = EPERM; } else { -- cgit v1.2.3