summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@oarcorp.com>2015-04-14 10:01:05 -0500
committerJoel Sherrill <joel.sherrill@oarcorp.com>2015-04-14 11:17:10 -0500
commitfc0756e8d9caf1155e2df1ad4a1282619c6668f1 (patch)
treebf4aa3a51cac86cfb220a6d34ba7538d60fb780e /cpukit
parentor1ksim: Fix bug at UART driver. (diff)
downloadrtems-fc0756e8d9caf1155e2df1ad4a1282619c6668f1.tar.bz2
Add test assertion for allocator mutex being unlocked
The Allocator Mutex should not be locked outside a tested service call. In an SMP test or heavily multithreaded test, this is possible since another thread could have the lock for an extended period of time but this is not the norm for the tests. updates 2319.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/score/Makefile.am2
-rw-r--r--cpukit/score/include/rtems/score/apimutex.h7
-rw-r--r--cpukit/score/src/apimutexislocked.c36
3 files changed, 44 insertions, 1 deletions
diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am
index dc51e9a691..f0cd67641c 100644
--- a/cpukit/score/Makefile.am
+++ b/cpukit/score/Makefile.am
@@ -149,7 +149,7 @@ endif
## CORE_APIMUTEX_C_FILES
libscore_a_SOURCES += src/apimutex.c \
- src/apimutexlock.c src/apimutexunlock.c
+ src/apimutexlock.c src/apimutexislocked.c src/apimutexunlock.c
## CORE_BARRIER_C_FILES
libscore_a_SOURCES += src/corebarrier.c src/corebarrierrelease.c \
diff --git a/cpukit/score/include/rtems/score/apimutex.h b/cpukit/score/include/rtems/score/apimutex.h
index 5f02e0a1cf..c960679d6b 100644
--- a/cpukit/score/include/rtems/score/apimutex.h
+++ b/cpukit/score/include/rtems/score/apimutex.h
@@ -85,6 +85,8 @@ void _API_Mutex_Lock( API_Mutex_Control *mutex );
*/
void _API_Mutex_Unlock( API_Mutex_Control *mutex );
+bool _API_Mutex_Is_Locked( API_Mutex_Control *mutex );
+
/** @} */
/**
@@ -118,6 +120,11 @@ static inline void _RTEMS_Unlock_allocator( void )
_API_Mutex_Unlock( _RTEMS_Allocator_Mutex );
}
+static inline bool _RTEMS_Check_if_allocator_is_locked( void )
+{
+ return _API_Mutex_Is_Locked( _RTEMS_Allocator_Mutex );
+}
+
SCORE_EXTERN API_Mutex_Control *_Once_Mutex;
static inline void _Once_Lock( void )
diff --git a/cpukit/score/src/apimutexislocked.c b/cpukit/score/src/apimutexislocked.c
new file mode 100644
index 0000000000..804ce4a6ce
--- /dev/null
+++ b/cpukit/score/src/apimutexislocked.c
@@ -0,0 +1,36 @@
+/**
+ * @file
+ *
+ * @brief Check if the specified API mutex is locked.
+ *
+ * @ingroup ScoreAPIMutex
+ */
+
+/*
+ * COPYRIGHT (c) 1989-2015.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/score/apimutex.h>
+#include <rtems/score/coremuteximpl.h>
+#include <rtems/score/threadimpl.h>
+
+bool _API_Mutex_Is_Locked( API_Mutex_Control *the_mutex )
+{
+ bool is_locked;
+ ISR_Level level;
+
+ _ISR_Disable( level );
+ is_locked = _CORE_mutex_Is_locked( &the_mutex->Mutex );
+ _ISR_Enable( level );
+
+ return is_locked;
+}