mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-05 15:15:44 +00:00
2009-08-05 Santosh G Vattam <vattam.santosh@gmail.com>
* Makefile.am, psxmsgq04/init.c, psxmsgq04/psxmsgq04.doc, psxmsgq04/psxmsgq04.scn: Exercise running out of memory while allocating the message buffers for a POSIX message queue.
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
2009-08-05 Santosh G Vattam <vattam.santosh@gmail.com>
|
||||||
|
|
||||||
|
* Makefile.am, psxmsgq04/init.c, psxmsgq04/psxmsgq04.doc,
|
||||||
|
psxmsgq04/psxmsgq04.scn: Exercise running out of memory while
|
||||||
|
allocating the message buffers for a POSIX message queue.
|
||||||
|
|
||||||
2009-08-02 Joel Sherrill <joel.sherrill@oarcorp.com>
|
2009-08-02 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||||
|
|
||||||
* psxsignal03/init.c, psxsignal03/psxsignal03.scn,
|
* psxsignal03/init.c, psxsignal03/psxsignal03.scn,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ SUBDIRS = psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \
|
|||||||
psx10 psx11 psx12 psx13 psx14 psxautoinit01 psxautoinit02 psxbarrier01 \
|
psx10 psx11 psx12 psx13 psx14 psxautoinit01 psxautoinit02 psxbarrier01 \
|
||||||
psxcancel psxcleanup psxcond01 psxenosys psxkey01 psxkey02 psxkey03 \
|
psxcancel psxcleanup psxcond01 psxenosys psxkey01 psxkey02 psxkey03 \
|
||||||
psxitimer psxmsgq01 psxmsgq02 psxmsgq03 psxmsgq04 psxmutexattr01 psxobj01 \
|
psxitimer psxmsgq01 psxmsgq02 psxmsgq03 psxmsgq04 psxmutexattr01 psxobj01 \
|
||||||
psxrwlock01 psxsem01 psxsignal01 psxsignal02 psxsignal03 psxsignal03 \
|
psxrwlock01 psxsem01 psxsignal01 psxsignal02 psxsignal03 psxsignal04 \
|
||||||
psxspin01 psxspin02 psxsysconf psxtime psxtimer01 psxtimer02 psxualarm \
|
psxspin01 psxspin02 psxsysconf psxtime psxtimer01 psxtimer02 psxualarm \
|
||||||
psxfatal01 psxfatal02 \
|
psxfatal01 psxfatal02 \
|
||||||
psxintrcritical01
|
psxintrcritical01
|
||||||
|
|||||||
@@ -24,13 +24,15 @@ void *POSIX_Init(
|
|||||||
void *argument
|
void *argument
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
struct mq_attr attr;
|
struct mq_attr attr;
|
||||||
mqd_t Queue;
|
mqd_t Queue, second_Queue;
|
||||||
int sc;
|
int sc;
|
||||||
|
Heap_Information_block info;
|
||||||
|
bool sb;
|
||||||
|
|
||||||
puts( "\n\n*** POSIX MESSAGE QUEUE TEST 4 ***" );
|
puts( "\n\n*** POSIX MESSAGE QUEUE TEST 4 ***" );
|
||||||
|
|
||||||
attr.mq_maxmsg = 1;
|
attr.mq_maxmsg = 1;
|
||||||
attr.mq_msgsize = sizeof(int);
|
attr.mq_msgsize = sizeof(int);
|
||||||
|
|
||||||
puts( "Init - Open message queue" );
|
puts( "Init - Open message queue" );
|
||||||
@@ -51,6 +53,36 @@ void *POSIX_Init(
|
|||||||
perror( "mq_close failed" );
|
perror( "mq_close failed" );
|
||||||
assert( sc == 0 );
|
assert( sc == 0 );
|
||||||
|
|
||||||
|
puts( "Init - Memory allocation error test" );
|
||||||
|
|
||||||
|
sb = rtems_workspace_get_information( &info );
|
||||||
|
|
||||||
|
attr.mq_msgsize = info.Free.largest;
|
||||||
|
|
||||||
|
while ( attr.mq_msgsize > 0 ) {
|
||||||
|
second_Queue = mq_open("second_queue",O_CREAT | O_RDWR, 0x777, &attr );
|
||||||
|
if ( second_Queue!=(-1) )
|
||||||
|
break;
|
||||||
|
attr.mq_msgsize -= 48;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( second_Queue == (-1) ) {
|
||||||
|
perror( "mq_open failed" );
|
||||||
|
assert( second_Queue != (-1) );
|
||||||
|
}
|
||||||
|
|
||||||
|
puts( "Init - Message Queue created" );
|
||||||
|
puts( "Init - Unlink message queue" );
|
||||||
|
sc = mq_unlink( "second_queue" );
|
||||||
|
if ( sc != 0 )
|
||||||
|
perror( "mq_unlink failed" );
|
||||||
|
assert( sc==0 );
|
||||||
|
|
||||||
|
puts( "Init - Close message queue" );
|
||||||
|
sc = mq_close( second_Queue );
|
||||||
|
if ( sc !=0 )
|
||||||
|
perror( "mq_close failed" );
|
||||||
|
assert( sc == 0 );
|
||||||
puts( "*** END OF POSIX MESSAGE QUEUE TEST 4 ***" );
|
puts( "*** END OF POSIX MESSAGE QUEUE TEST 4 ***" );
|
||||||
rtems_test_exit( 0 );
|
rtems_test_exit( 0 );
|
||||||
|
|
||||||
|
|||||||
@@ -16,11 +16,10 @@ test set name: psxmsgq04
|
|||||||
directives:
|
directives:
|
||||||
|
|
||||||
mq_open
|
mq_open
|
||||||
mq_send
|
mq_unlink
|
||||||
|
mq_close
|
||||||
|
|
||||||
concepts:
|
concepts:
|
||||||
|
|
||||||
+ Ensure that an error is returned when performing a blocking mq_send
|
+ Ensure that the situation where we do not have enough Workspace memory
|
||||||
from an Interrupt Service Routine. This condition is beyond the
|
left to allocate the message buffers is properly handled.
|
||||||
POSIX Standard because they do not discuss interrupt processing and
|
|
||||||
what operations are allowed.
|
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
*** POSIX MESSAGE QUEUE TEST 4 ***
|
||||||
|
Init - Open message queue
|
||||||
|
Init - Unlink message queue
|
||||||
|
Init - Close message queue
|
||||||
|
Init - Memory allocation error test
|
||||||
|
Init - Message Queue created
|
||||||
|
Init - Unlink message queue
|
||||||
|
Init - Close message queue
|
||||||
|
*** END OF POSIX MESSAGE QUEUE TEST 4 ***
|
||||||
|
|||||||
Reference in New Issue
Block a user