[rtems commit] posix: Use mutex object itself for condvar

Sebastian Huber sebh at rtems.org
Tue Sep 12 06:12:09 UTC 2017


Module:    rtems
Branch:    master
Commit:    62c912e15581e8d2dee9300b99e0532614f5c7e5
Changeset: http://git.rtems.org/rtems/commit/?id=62c912e15581e8d2dee9300b99e0532614f5c7e5

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Fri Sep  8 13:10:24 2017 +0200

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 bbb80ef..52b9a59 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 b71b6f0..e9375c1 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 589b5e2..486bab8 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 {




More information about the vc mailing list