File indexing completed on 2025-05-11 08:24:35
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 "system.h"
0043
0044 char buffer1[16] = "123456789012345";
0045 char buffer2[16] = "abcdefghijklmno";
0046 char buffer3[16] = "ABCDEFGHIJKLMNO";
0047 char buffer4[16] = "PQRSTUVWXYZ(){}";
0048
0049 rtems_task Test_task(
0050 rtems_task_argument argument
0051 )
0052 {
0053 rtems_status_code status;
0054 uint32_t count;
0055 size_t size;
0056 char receive_buffer[16];
0057
0058 status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() );
0059 directive_failed( status, "rtems_task_wake_after" );
0060
0061 puts( "Getting QID of message queue" );
0062
0063 do {
0064 status = rtems_message_queue_ident(
0065 Queue_name[ 1 ],
0066 RTEMS_SEARCH_ALL_NODES,
0067 &Queue_id[ 1 ]
0068 );
0069 } while ( !rtems_is_status_successful( status ) );
0070
0071 status = rtems_message_queue_ident(
0072 Queue_name[ 2 ],
0073 RTEMS_SEARCH_ALL_NODES,
0074 &Queue_id[ 2 ]
0075 );
0076 directive_failed( status, "rtems_message_queue_ident" );
0077
0078 if ( rtems_object_get_local_node() == 2 ) {
0079 status = rtems_message_queue_delete( Queue_id[ 2 ] );
0080 fatal_directive_status(
0081 status,
0082 RTEMS_ILLEGAL_ON_REMOTE_OBJECT,
0083 "rtems_message_queue_delete"
0084 );
0085 status = rtems_message_queue_delete( Queue_id[ 1 ] );
0086 fatal_directive_status(
0087 status,
0088 RTEMS_ILLEGAL_ON_REMOTE_OBJECT,
0089 "rtems_message_queue_delete"
0090 );
0091 puts(
0092 "rtems_message_queue_delete correctly returned RTEMS_ILLEGAL_ON_REMOTE_OBJECT"
0093 );
0094
0095 Send_messages();
0096 Receive_messages();
0097
0098 puts( "Flushing remote empty queue" );
0099 status = rtems_message_queue_flush( Queue_id[ 1 ], &count );
0100 directive_failed( status, "rtems_message_queue_flush" );
0101 printf( "%" PRIu32 " messages were flushed on the remote queue\n", count );
0102
0103 puts( "Send messages to be flushed from remote queue" );
0104 status = rtems_message_queue_send( Queue_id[ 1 ], buffer1, 16 );
0105 directive_failed( status, "rtems_message_queue_send" );
0106
0107 puts( "Flushing remote queue" );
0108 status = rtems_message_queue_flush( Queue_id[ 1 ], &count );
0109 directive_failed( status, "rtems_message_queue_flush" );
0110 printf( "%" PRIu32 " messages were flushed on the remote queue\n", count );
0111
0112 puts( "Waiting for message queue to be deleted" );
0113 status = rtems_message_queue_receive(
0114 Queue_id[ 1 ],
0115 receive_buffer,
0116 &size,
0117 RTEMS_DEFAULT_OPTIONS,
0118 RTEMS_NO_TIMEOUT
0119 );
0120 fatal_directive_status(
0121 status,
0122 RTEMS_OBJECT_WAS_DELETED,
0123 "rtems_message_queue_receive"
0124 );
0125 puts( "\nGlobal message queue deleted" );
0126 }
0127 else {
0128 Receive_messages();
0129 Send_messages();
0130
0131 puts( "Delaying for 5 seconds" );
0132 status = rtems_task_wake_after( 5*rtems_clock_get_ticks_per_second() );
0133 directive_failed( status, "rtems_task_wake_after" );
0134
0135 puts( "Deleting Message queue" );
0136 status = rtems_message_queue_delete( Queue_id[ 1 ] );
0137 directive_failed( status, "rtems_message_queue_delete" );
0138
0139 status = rtems_message_queue_delete( Queue_id[ 2 ] );
0140 directive_failed( status, "rtems_message_queue_delete" );
0141 }
0142
0143 puts( "*** END OF TEST 9 ***" );
0144 rtems_test_exit( 0 );
0145 }