From c005d41297b51c2a3155145269a548ab8a1801fb Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 6 Aug 2009 19:24:38 +0000 Subject: 2009-08-06 Joel Sherrill * psxmsgq04/init.c, psxmsgq04/psxmsgq04.scn: Tinker with test to ensure that it hits both failing to allocate memory for the message queue name and message buffers. --- testsuites/psxtests/psxmsgq04/init.c | 59 +++++++++++++++++++++++------ testsuites/psxtests/psxmsgq04/psxmsgq04.scn | 6 +-- 2 files changed, 50 insertions(+), 15 deletions(-) (limited to 'testsuites/psxtests/psxmsgq04') diff --git a/testsuites/psxtests/psxmsgq04/init.c b/testsuites/psxtests/psxmsgq04/init.c index 06ffef7da7..81c2421cf9 100644 --- a/testsuites/psxtests/psxmsgq04/init.c +++ b/testsuites/psxtests/psxmsgq04/init.c @@ -27,8 +27,12 @@ void *POSIX_Init( struct mq_attr attr; mqd_t Queue, second_Queue; int sc; + Heap_Information_block start; Heap_Information_block info; + size_t to_alloc; + void *alloced; bool sb; + const char *name; puts( "\n\n*** POSIX MESSAGE QUEUE TEST 4 ***" ); @@ -60,36 +64,64 @@ void *POSIX_Init( perror( "mq_close failed" ); assert( sc == 0 ); + sb = rtems_workspace_get_information( &start ); + assert( start.Free.number == 1 ); + to_alloc = start.Free.largest; + + /* find the largest we can actually allocate */ + while ( 1 ) { + sb = rtems_workspace_allocate( to_alloc, &alloced ); + if ( sb ) + break; + to_alloc -= 4; + } + + rtems_workspace_free( alloced ); + + /* + * Now do the test + */ puts( "Init - Memory allocation error test" ); sb = rtems_workspace_get_information( &info ); - attr.mq_msgsize = info.Free.largest; + attr.mq_maxmsg = 1; + attr.mq_msgsize = 200; + name = Get_Longest_Name(); while ( attr.mq_msgsize > 0 ) { - second_Queue = mq_open("second_queue",O_CREAT | O_RDWR, 0x777, &attr ); - if ( second_Queue!=(-1) ) + sb = rtems_workspace_allocate( to_alloc, &alloced ); + assert( sb ); + + second_Queue = mq_open(name,O_CREAT | O_RDWR, 0x777, &attr ); + + /* free the memory we snagged, then check the status */ + rtems_workspace_free( alloced ); + + if ( second_Queue != (-1) ) break; - attr.mq_msgsize -= 48; - } - if ( second_Queue == (-1) ) { - perror( "mq_open failed" ); - assert( second_Queue != (-1) ); + /* attr.mq_msgsize -= 48; */ + to_alloc -= 4; } + if ( second_Queue == -1 ) + rtems_test_exit(0); + puts( "Init - Message Queue created" ); + puts( "Init - Unlink message queue" ); - sc = mq_unlink( "second_queue" ); + sc = mq_unlink( name ); if ( sc != 0 ) perror( "mq_unlink failed" ); - assert( sc==0 ); + assert( sc == 0 ); puts( "Init - Close message queue" ); sc = mq_close( second_Queue ); - if ( sc !=0 ) + if ( sc != 0 ) perror( "mq_close failed" ); assert( sc == 0 ); + puts( "*** END OF POSIX MESSAGE QUEUE TEST 4 ***" ); rtems_test_exit( 0 ); @@ -103,6 +135,10 @@ void *POSIX_Init( #define CONFIGURE_POSIX_INIT_THREAD_TABLE +/* account for message buffers and string names */ +#define CONFIGURE_MESSAGE_BUFFER_MEMORY \ + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(1, sizeof(int)) + #define CONFIGURE_MAXIMUM_POSIX_THREADS 1 #define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 1 #define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS 2 @@ -111,4 +147,3 @@ void *POSIX_Init( #define CONFIGURE_INIT #include -/* end of include file */ diff --git a/testsuites/psxtests/psxmsgq04/psxmsgq04.scn b/testsuites/psxtests/psxmsgq04/psxmsgq04.scn index 17310552af..fa70314d32 100644 --- a/testsuites/psxtests/psxmsgq04/psxmsgq04.scn +++ b/testsuites/psxtests/psxmsgq04/psxmsgq04.scn @@ -1,8 +1,8 @@ *** POSIX MESSAGE QUEUE TEST 4 *** -Init - Open message queue +Init - Open message queue instance 1 Init - Open message queue instance 2 - FAIL - ENFILE -Init - Unlink message queue -Init - Close message queue +Init - Unlink message queue instance 1 +Init - Close message queue instance 1 Init - Memory allocation error test Init - Message Queue created Init - Unlink message queue -- cgit v1.2.3