[rtems commit] condwaitsupp.c: Return EPERM if waiting and mutex is not locked

Joel Sherrill joel at rtems.org
Tue Dec 10 01:46:24 UTC 2013


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

Author:    Joel Sherrill <joel.sherrill at oarcorp.com>
Date:      Mon Dec  9 15:25:16 2013 -0600

condwaitsupp.c: Return EPERM if waiting and mutex is not locked

This error check was commented out because it is not in the POSIX
specification. However, the GNU/Linux manual page does document
that EPERM is to be returned in this situation.

---

 cpukit/posix/src/condwaitsupp.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/cpukit/posix/src/condwaitsupp.c b/cpukit/posix/src/condwaitsupp.c
index a13d4f7..e529907 100644
--- a/cpukit/posix/src/condwaitsupp.c
+++ b/cpukit/posix/src/condwaitsupp.c
@@ -58,13 +58,17 @@ int _POSIX_Condition_variables_Wait_support(
         return EINVAL;
       }
 
-      (void) pthread_mutex_unlock( mutex );
-/* XXX ignore this for now  since behavior is undefined
+
+      mutex_status = pthread_mutex_unlock( mutex );
+      /*
+       *  Historically, we ignored the return code since the behavior
+       *  is undefined by POSIX. But GNU/Linux returns EPERM in this
+       *  case, so we follow their lead.
+       */
       if ( mutex_status ) {
         _Objects_Put( &the_cond->Object );
-        return EINVAL;
+        return EPERM;
       }
-*/
 
       if ( !already_timedout ) {
         the_cond->Mutex = *mutex;




More information about the vc mailing list