diff options
Diffstat (limited to 'cpukit/rtems/src/msgqdelete.c')
-rw-r--r-- | cpukit/rtems/src/msgqdelete.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/cpukit/rtems/src/msgqdelete.c b/cpukit/rtems/src/msgqdelete.c index d3c07679f4..e2df2b9d9a 100644 --- a/cpukit/rtems/src/msgqdelete.c +++ b/cpukit/rtems/src/msgqdelete.c @@ -37,6 +37,7 @@ rtems_status_code rtems_message_queue_delete( Message_queue_Control *the_message_queue; Objects_Locations location; + _Objects_Allocator_lock(); the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { @@ -54,8 +55,6 @@ rtems_status_code rtems_message_queue_delete( CORE_MESSAGE_QUEUE_STATUS_WAS_DELETED ); - _Message_queue_Free( the_message_queue ); - #if defined(RTEMS_MULTIPROCESSING) if ( _Attributes_Is_global( the_message_queue->attribute_set ) ) { _Objects_MP_Close( @@ -72,11 +71,13 @@ rtems_status_code rtems_message_queue_delete( } #endif _Objects_Put( &the_message_queue->Object ); + _Message_queue_Free( the_message_queue ); + _Objects_Allocator_unlock(); return RTEMS_SUCCESSFUL; #if defined(RTEMS_MULTIPROCESSING) case OBJECTS_REMOTE: - _Thread_Dispatch(); + _Objects_Allocator_unlock(); return RTEMS_ILLEGAL_ON_REMOTE_OBJECT; #endif @@ -84,5 +85,7 @@ rtems_status_code rtems_message_queue_delete( break; } + _Objects_Allocator_unlock(); + return RTEMS_INVALID_ID; } |