score: Replace _API_Mutex_Is_locked()

Replace _API_Mutex_Is_locked() with _API_Mutex_Is_owner().
This commit is contained in:
Sebastian Huber
2015-05-27 11:43:44 +02:00
parent ffe14b26c8
commit ec84273de4
4 changed files with 31 additions and 35 deletions

View File

@@ -160,7 +160,7 @@ endif
## CORE_APIMUTEX_C_FILES ## CORE_APIMUTEX_C_FILES
libscore_a_SOURCES += src/apimutex.c \ libscore_a_SOURCES += src/apimutex.c \
src/apimutexlock.c src/apimutexislocked.c src/apimutexunlock.c src/apimutexlock.c src/apimutexisowner.c src/apimutexunlock.c
## CORE_BARRIER_C_FILES ## CORE_BARRIER_C_FILES
libscore_a_SOURCES += src/corebarrier.c src/corebarrierrelease.c \ libscore_a_SOURCES += src/corebarrier.c src/corebarrierrelease.c \

View File

@@ -85,7 +85,12 @@ void _API_Mutex_Lock( API_Mutex_Control *mutex );
*/ */
void _API_Mutex_Unlock( API_Mutex_Control *mutex ); void _API_Mutex_Unlock( API_Mutex_Control *mutex );
bool _API_Mutex_Is_locked( const API_Mutex_Control *mutex ); /**
* @brief Checks if the specified API mutex is owned by the executing thread.
*
* @param[in] mutex The API mutex.
*/
bool _API_Mutex_Is_owner( const API_Mutex_Control *mutex );
/** @} */ /** @} */
@@ -120,9 +125,9 @@ static inline void _RTEMS_Unlock_allocator( void )
_API_Mutex_Unlock( _RTEMS_Allocator_Mutex ); _API_Mutex_Unlock( _RTEMS_Allocator_Mutex );
} }
static inline bool _RTEMS_Check_if_allocator_is_locked( void ) static inline bool _RTEMS_Allocator_is_owner( void )
{ {
return _API_Mutex_Is_locked( _RTEMS_Allocator_Mutex ); return _API_Mutex_Is_owner( _RTEMS_Allocator_Mutex );
} }
SCORE_EXTERN API_Mutex_Control *_Once_Mutex; SCORE_EXTERN API_Mutex_Control *_Once_Mutex;

View File

@@ -1,8 +1,6 @@
/** /**
* @file * @file
* *
* @brief Check if the specified API mutex is locked.
*
* @ingroup ScoreAPIMutex * @ingroup ScoreAPIMutex
*/ */
@@ -20,9 +18,9 @@
#endif #endif
#include <rtems/score/apimutex.h> #include <rtems/score/apimutex.h>
#include <rtems/score/coremuteximpl.h> #include <rtems/score/threadimpl.h>
bool _API_Mutex_Is_locked( const API_Mutex_Control *the_mutex ) bool _API_Mutex_Is_owner( const API_Mutex_Control *the_mutex )
{ {
return _CORE_mutex_Is_locked( &the_mutex->Mutex ); return the_mutex->Mutex.holder == _Thread_Get_executing();
} }

View File

@@ -70,30 +70,23 @@ extern "C" {
#endif #endif
/* /*
* Check that that the allocator mutex is not locked. It should never * Check that that the allocator mutex is not owned by the executing thread.
* be locked unless inside a service which is allocating a resource.
*
* This test is only valid when in a non-SMP system. In an SMP system
* another cpu may be allocating a resource while we are computing.
*/ */
#if defined SMPTEST #include <rtems/score/apimutex.h>
#define check_if_allocator_mutex_is_unlocked() #define check_if_allocator_mutex_is_not_owned() \
#else do { \
#include <rtems/score/apimutex.h> if ( _RTEMS_Allocator_is_owner() ) { \
#define check_if_allocator_mutex_is_unlocked() \ printk( \
do { \ "\nRTEMS Allocator Mutex is owned by executing thread " \
if ( _RTEMS_Check_if_allocator_is_locked() ) { \ "and should not be.\n" \
printk( \ "Detected at %s:%d\n", \
"\nRTEMS Allocator Mutex is locked and should not be.\n" \ __FILE__, \
"Detected at %s:%d\n", \ __LINE__ \
__FILE__, \ ); \
__LINE__ \ FLUSH_OUTPUT(); \
); \ rtems_test_exit( 1 ); \
FLUSH_OUTPUT(); \ } \
rtems_test_exit( 1 ); \ } while ( 0 )
} \
} while ( 0 )
#endif
/* /*
* These macros properly report errors within the Classic API * These macros properly report errors within the Classic API
@@ -121,7 +114,7 @@ extern "C" {
#define fatal_directive_status_with_level( _stat, _desired, _msg, _level ) \ #define fatal_directive_status_with_level( _stat, _desired, _msg, _level ) \
do { \ do { \
check_dispatch_disable_level( _level ); \ check_dispatch_disable_level( _level ); \
check_if_allocator_mutex_is_unlocked(); \ check_if_allocator_mutex_is_not_owned(); \
fatal_directive_check_status_only( _stat, _desired, _msg ); \ fatal_directive_check_status_only( _stat, _desired, _msg ); \
} while ( 0 ) } while ( 0 )
@@ -139,7 +132,7 @@ extern "C" {
if ( (_stat != -1) && (errno) != (_desired) ) { \ if ( (_stat != -1) && (errno) != (_desired) ) { \
long statx = _stat; \ long statx = _stat; \
check_dispatch_disable_level( 0 ); \ check_dispatch_disable_level( 0 ); \
check_if_allocator_mutex_is_unlocked(); \ check_if_allocator_mutex_is_not_owned(); \
printf( "\n%s FAILED -- expected (%d - %s) got (%ld %d - %s)\n", \ printf( "\n%s FAILED -- expected (%d - %s) got (%ld %d - %s)\n", \
(_msg), _desired, strerror(_desired), \ (_msg), _desired, strerror(_desired), \
statx, errno, strerror(errno) ); \ statx, errno, strerror(errno) ); \
@@ -153,7 +146,7 @@ extern "C" {
#define fatal_posix_service_status_with_level( _stat, _desired, _msg, _level ) \ #define fatal_posix_service_status_with_level( _stat, _desired, _msg, _level ) \
do { \ do { \
check_dispatch_disable_level( _level ); \ check_dispatch_disable_level( _level ); \
check_if_allocator_mutex_is_unlocked(); \ check_if_allocator_mutex_is_not_owned(); \
if ( (_stat) != (_desired) ) { \ if ( (_stat) != (_desired) ) { \
printf( "\n%s FAILED -- expected (%d - %s) got (%d - %s)\n", \ printf( "\n%s FAILED -- expected (%d - %s) got (%d - %s)\n", \
(_msg), _desired, strerror(_desired), _stat, strerror(_stat) ); \ (_msg), _desired, strerror(_desired), _stat, strerror(_stat) ); \