diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1996-07-04 18:09:23 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1996-07-04 18:09:23 +0000 |
commit | 69c95435434e389f967b80f39cfea5a6013ff32e (patch) | |
tree | 7e0a37e5e6d217e6d1791e4e4228e8648a61297b /cpukit/posix/src/mutex.c | |
parent | added test case for timeout using pthread_mutex_timedlock (diff) | |
download | rtems-69c95435434e389f967b80f39cfea5a6013ff32e.tar.bz2 |
basic test cases passed
Diffstat (limited to 'cpukit/posix/src/mutex.c')
-rw-r--r-- | cpukit/posix/src/mutex.c | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/cpukit/posix/src/mutex.c b/cpukit/posix/src/mutex.c index f521504120..318635236a 100644 --- a/cpukit/posix/src/mutex.c +++ b/cpukit/posix/src/mutex.c @@ -64,6 +64,35 @@ const pthread_mutexattr_t _POSIX_Mutex_Default_attributes = { /*PAGE * + * _POSIX_Mutex_From_core_mutex_status + */ + +int _POSIX_Mutex_From_core_mutex_status( + CORE_mutex_Status status +) +{ + switch ( status ) { + case CORE_MUTEX_STATUS_SUCCESSFUL: + return 0; + case CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT: + return EBUSY; + case CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED: + return EDEADLK; + case CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE: + return EPERM; + case CORE_MUTEX_WAS_DELETED: + return EINVAL; + case CORE_MUTEX_TIMEOUT: + return EAGAIN; + default: + break; + } + assert( 0 ); + return 0; +} + +/*PAGE + * * _POSIX_Mutex_Manager_initialization * * This routine initializes all mutex manager related data structures. @@ -364,8 +393,9 @@ int _POSIX_Mutex_Lock_support( timeout ); _Thread_Enable_dispatch(); - return _Thread_Executing->Wait.return_code; - break; + return _POSIX_Mutex_From_core_mutex_status( + (CORE_mutex_Status) _Thread_Executing->Wait.return_code + ); } return POSIX_BOTTOM_REACHED(); } @@ -419,6 +449,7 @@ int pthread_mutex_unlock( { register POSIX_Mutex_Control *the_mutex; Objects_Locations location; + CORE_mutex_Status status; the_mutex = _POSIX_Mutex_Get( mutex, &location ); switch ( location ) { @@ -432,13 +463,13 @@ int pthread_mutex_unlock( MPCI_DEFAULT_TIMEOUT ); case OBJECTS_LOCAL: - _CORE_mutex_Surrender( + status = _CORE_mutex_Surrender( &the_mutex->Mutex, the_mutex->Object.id, POSIX_Threads_mutex_MP_support ); _Thread_Enable_dispatch(); - return _Thread_Executing->Wait.return_code; /* XXX return status */ + return _POSIX_Mutex_From_core_mutex_status( status ); break; } return POSIX_BOTTOM_REACHED(); |