diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-03-27 14:46:31 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-03-31 10:14:42 +0200 |
commit | 03e8928753ef76cb747b965938092c59d6306060 (patch) | |
tree | b97520d3bd562dc50a226b590d8626f2b4e85d19 /cpukit/score | |
parent | score: Delete CORE_mutex_Control::holder_id (diff) | |
download | rtems-03e8928753ef76cb747b965938092c59d6306060.tar.bz2 |
score: Delete CORE_mutex_Control::lock
The holder field is enough to determine if a mutex is locked or not.
This leads also to better error status codes in case a
rtems_semaphore_release() is done for a mutex without having the
ownership.
Diffstat (limited to 'cpukit/score')
-rw-r--r-- | cpukit/score/include/rtems/score/coremutex.h | 3 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/coremuteximpl.h | 20 | ||||
-rw-r--r-- | cpukit/score/src/apimutex.c | 2 | ||||
-rw-r--r-- | cpukit/score/src/coremutex.c | 5 | ||||
-rw-r--r-- | cpukit/score/src/coremutexsurrender.c | 3 |
5 files changed, 9 insertions, 24 deletions
diff --git a/cpukit/score/include/rtems/score/coremutex.h b/cpukit/score/include/rtems/score/coremutex.h index a29aee5ac8..ccf6066740 100644 --- a/cpukit/score/include/rtems/score/coremutex.h +++ b/cpukit/score/include/rtems/score/coremutex.h @@ -155,9 +155,6 @@ typedef struct { * behavior. */ CORE_mutex_Attributes Attributes; - /** This element contains the current state of the mutex. - */ - uint32_t lock; /** This element contains the number of times the mutex has been acquired * nested. This must be zero (0) before the mutex is actually unlocked. */ diff --git a/cpukit/score/include/rtems/score/coremuteximpl.h b/cpukit/score/include/rtems/score/coremuteximpl.h index 497843850f..cf327e81c3 100644 --- a/cpukit/score/include/rtems/score/coremuteximpl.h +++ b/cpukit/score/include/rtems/score/coremuteximpl.h @@ -99,16 +99,6 @@ typedef enum { #define CORE_MUTEX_STATUS_LAST CORE_MUTEX_STATUS_CEILING_VIOLATED /** - * This is the value of a mutex when it is unlocked. - */ -#define CORE_MUTEX_UNLOCKED 1 - -/** - * This is the value of a mutex when it is locked. - */ -#define CORE_MUTEX_LOCKED 0 - -/** * @brief Initializes the mutex based on the parameters passed. * * This routine initializes the mutex based on the parameters passed. @@ -117,7 +107,8 @@ typedef enum { * @param[in,out] executing The currently executing thread. * @param[in] the_mutex_attributes is the attributes associated with this * mutex instance - * @param[in] initial_lock is the initial value of the mutex + * @param[in] initially_locked If true, then the mutex is initially locked by + * the executing thread. * * @retval This method returns CORE_MUTEX_STATUS_SUCCESSFUL if successful. */ @@ -125,7 +116,7 @@ CORE_mutex_Status _CORE_mutex_Initialize( CORE_mutex_Control *the_mutex, Thread_Control *executing, const CORE_mutex_Attributes *the_mutex_attributes, - uint32_t initial_lock + bool initially_locked ); /** @@ -357,7 +348,7 @@ RTEMS_INLINE_ROUTINE bool _CORE_mutex_Is_locked( CORE_mutex_Control *the_mutex ) { - return the_mutex->lock == CORE_MUTEX_LOCKED; + return the_mutex->holder != NULL; } /** @@ -452,7 +443,6 @@ RTEMS_INLINE_ROUTINE int _CORE_mutex_Seize_interrupt_trylock_body( executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL; if ( !_CORE_mutex_Is_locked( the_mutex ) ) { - the_mutex->lock = CORE_MUTEX_LOCKED; the_mutex->holder = executing; the_mutex->nest_count = 1; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || @@ -499,7 +489,7 @@ RTEMS_INLINE_ROUTINE int _CORE_mutex_Seize_interrupt_trylock_body( } /* if ( current < ceiling ) */ { executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED; - the_mutex->lock = CORE_MUTEX_UNLOCKED; + the_mutex->holder = NULL; the_mutex->nest_count = 0; /* undo locking above */ executing->resource_count--; /* undo locking above */ _ISR_Enable( level ); diff --git a/cpukit/score/src/apimutex.c b/cpukit/score/src/apimutex.c index 7899934183..ec2fbdc3ec 100644 --- a/cpukit/score/src/apimutex.c +++ b/cpukit/score/src/apimutex.c @@ -61,7 +61,7 @@ void _API_Mutex_Allocate( mutex = (API_Mutex_Control *) _Objects_Allocate_unprotected( &_API_Mutex_Information ); - _CORE_mutex_Initialize( &mutex->Mutex, NULL, &attr, CORE_MUTEX_UNLOCKED ); + _CORE_mutex_Initialize( &mutex->Mutex, NULL, &attr, false ); _Objects_Open_u32( &_API_Mutex_Information, &mutex->Object, 1 ); diff --git a/cpukit/score/src/coremutex.c b/cpukit/score/src/coremutex.c index 1c6c3db302..96b11c9cd1 100644 --- a/cpukit/score/src/coremutex.c +++ b/cpukit/score/src/coremutex.c @@ -27,7 +27,7 @@ CORE_mutex_Status _CORE_mutex_Initialize( CORE_mutex_Control *the_mutex, Thread_Control *executing, const CORE_mutex_Attributes *the_mutex_attributes, - uint32_t initial_lock + bool initially_locked ) { @@ -37,9 +37,8 @@ CORE_mutex_Status _CORE_mutex_Initialize( */ the_mutex->Attributes = *the_mutex_attributes; - the_mutex->lock = initial_lock; - if ( initial_lock == CORE_MUTEX_LOCKED ) { + if ( initially_locked ) { the_mutex->nest_count = 1; the_mutex->holder = executing; if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || diff --git a/cpukit/score/src/coremutexsurrender.c b/cpukit/score/src/coremutexsurrender.c index de1c744c2c..fff3cd74da 100644 --- a/cpukit/score/src/coremutexsurrender.c +++ b/cpukit/score/src/coremutexsurrender.c @@ -217,8 +217,7 @@ CORE_mutex_Status _CORE_mutex_Surrender( break; } } - } else - the_mutex->lock = CORE_MUTEX_UNLOCKED; + } return CORE_MUTEX_STATUS_SUCCESSFUL; } |