diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-04-21 09:21:29 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-04-23 08:54:09 +0200 |
commit | d349e8a439d022bda3f9637fff013cfc8e55743d (patch) | |
tree | 9c694fcb7e7d142045cf84df4d27f17e8cbcfa1c /cpukit/score/include/rtems/score/coremsgimpl.h | |
parent | score: Delete _CORE_RWLock_Timeout() (diff) | |
download | rtems-d349e8a439d022bda3f9637fff013cfc8e55743d.tar.bz2 |
score: Fix priority message queue insert
Move the linear search into a critical section to avoid corruption due
to higher priority interrupts. The interrupt disable time depends now
on the count of pending messages.
Close #2328.
Diffstat (limited to 'cpukit/score/include/rtems/score/coremsgimpl.h')
-rw-r--r-- | cpukit/score/include/rtems/score/coremsgimpl.h | 32 |
1 files changed, 1 insertions, 31 deletions
diff --git a/cpukit/score/include/rtems/score/coremsgimpl.h b/cpukit/score/include/rtems/score/coremsgimpl.h index 52796ad885..cedf2760e8 100644 --- a/cpukit/score/include/rtems/score/coremsgimpl.h +++ b/cpukit/score/include/rtems/score/coremsgimpl.h @@ -443,7 +443,7 @@ RTEMS_INLINE_ROUTINE void _CORE_message_queue_Free_message_buffer ( * disabled if no API requires it. */ RTEMS_INLINE_ROUTINE int _CORE_message_queue_Get_message_priority ( - CORE_message_queue_Buffer_control *the_message + const CORE_message_queue_Buffer_control *the_message ) { #if defined(RTEMS_SCORE_COREMSG_ENABLE_MESSAGE_PRIORITY) @@ -494,36 +494,6 @@ RTEMS_INLINE_ROUTINE bool _CORE_message_queue_Is_priority( (the_attribute->discipline == CORE_MESSAGE_QUEUE_DISCIPLINES_PRIORITY); } -/** - * This routine places the_message at the rear of the outstanding - * messages on the_message_queue. - */ -RTEMS_INLINE_ROUTINE void _CORE_message_queue_Append_unprotected ( - CORE_message_queue_Control *the_message_queue, - CORE_message_queue_Buffer_control *the_message -) -{ - _Chain_Append_unprotected( - &the_message_queue->Pending_messages, - &the_message->Node - ); -} - -/** - * This routine places the_message at the front of the outstanding - * messages on the_message_queue. - */ -RTEMS_INLINE_ROUTINE void _CORE_message_queue_Prepend_unprotected ( - CORE_message_queue_Control *the_message_queue, - CORE_message_queue_Buffer_control *the_message -) -{ - _Chain_Prepend_unprotected( - &the_message_queue->Pending_messages, - &the_message->Node - ); -} - #if defined(RTEMS_SCORE_COREMSG_ENABLE_NOTIFICATION) /** * This function returns true if notification is enabled on this message |