File indexing completed on 2025-05-11 08:24:26
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038 #ifdef HAVE_CONFIG_H
0039 #include "config.h"
0040 #endif
0041
0042 #include <rtems/score/coremsgimpl.h>
0043
0044 #if defined(RTEMS_SCORE_COREMSG_ENABLE_MESSAGE_PRIORITY)
0045 static bool _CORE_message_queue_Order(
0046 const void *key,
0047 const Chain_Node *left,
0048 const Chain_Node *right
0049 )
0050 {
0051 const int *left_priority;
0052 const CORE_message_queue_Buffer *right_message;
0053
0054 (void) left;
0055 left_priority = (const int *) key;
0056 right_message = (const CORE_message_queue_Buffer *) right;
0057
0058 return *left_priority <
0059 _CORE_message_queue_Get_message_priority( right_message );
0060 }
0061 #endif
0062
0063 void _CORE_message_queue_Insert_message(
0064 CORE_message_queue_Control *the_message_queue,
0065 CORE_message_queue_Buffer *the_message,
0066 const void *content_source,
0067 size_t content_size,
0068 CORE_message_queue_Submit_types submit_type
0069 )
0070 {
0071 Chain_Control *pending_messages;
0072
0073 the_message->size = content_size;
0074
0075 _CORE_message_queue_Copy_buffer(
0076 content_source,
0077 the_message->buffer,
0078 content_size
0079 );
0080
0081 #if defined(RTEMS_SCORE_COREMSG_ENABLE_MESSAGE_PRIORITY)
0082 the_message->priority = submit_type;
0083 #endif
0084
0085 pending_messages = &the_message_queue->Pending_messages;
0086 ++the_message_queue->number_of_pending_messages;
0087
0088 if ( submit_type == CORE_MESSAGE_QUEUE_SEND_REQUEST ) {
0089 _Chain_Append_unprotected( pending_messages, &the_message->Node );
0090 #if defined(RTEMS_SCORE_COREMSG_ENABLE_MESSAGE_PRIORITY)
0091 } else if ( submit_type != CORE_MESSAGE_QUEUE_URGENT_REQUEST ) {
0092 int priority;
0093
0094 priority = _CORE_message_queue_Get_message_priority( the_message );
0095 _Chain_Insert_ordered_unprotected(
0096 pending_messages,
0097 &the_message->Node,
0098 &priority,
0099 _CORE_message_queue_Order
0100 );
0101 #endif
0102 } else {
0103 _Chain_Prepend_unprotected( pending_messages, &the_message->Node );
0104 }
0105 }