diff options
Diffstat (limited to 'cpukit/rtems/src/msgqgetnumberpending.c')
-rw-r--r-- | cpukit/rtems/src/msgqgetnumberpending.c | 47 |
1 files changed, 17 insertions, 30 deletions
diff --git a/cpukit/rtems/src/msgqgetnumberpending.c b/cpukit/rtems/src/msgqgetnumberpending.c index ee058d8ff0..756e8fe9c9 100644 --- a/cpukit/rtems/src/msgqgetnumberpending.c +++ b/cpukit/rtems/src/msgqgetnumberpending.c @@ -18,55 +18,42 @@ #include "config.h" #endif -#include <rtems/system.h> -#include <rtems/score/chain.h> -#include <rtems/score/isr.h> -#include <rtems/score/coremsgimpl.h> -#include <rtems/score/thread.h> -#include <rtems/score/wkspace.h> -#include <rtems/rtems/status.h> -#include <rtems/rtems/attrimpl.h> #include <rtems/rtems/messageimpl.h> -#include <rtems/rtems/options.h> -#include <rtems/rtems/support.h> - -/* - * rtems_message_queue_get_number_pending - * - * This directive returns the number of messages pending. - * - * Input parameters: - * id - queue id - * count - return area for count - * - * Output parameters: - * count - number of messages removed ( 0 = empty queue ) - * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful - */ rtems_status_code rtems_message_queue_get_number_pending( rtems_id id, uint32_t *count ) { - Message_queue_Control *the_message_queue; - Objects_Locations location; + Message_queue_Control *the_message_queue; + Objects_Locations location; + ISR_lock_Context lock_context; if ( !count ) return RTEMS_INVALID_ADDRESS; - the_message_queue = _Message_queue_Get( id, &location ); + the_message_queue = _Message_queue_Get_interrupt_disable( + id, + &location, + &lock_context + ); switch ( location ) { case OBJECTS_LOCAL: + _CORE_message_queue_Acquire_critical( + &the_message_queue->message_queue, + &lock_context + ); *count = the_message_queue->message_queue.number_of_pending_messages; - _Objects_Put( &the_message_queue->Object ); + _CORE_message_queue_Release( + &the_message_queue->message_queue, + &lock_context + ); return RTEMS_SUCCESSFUL; #if defined(RTEMS_MULTIPROCESSING) case OBJECTS_REMOTE: - _Thread_Executing->Wait.return_argument = count; + _Thread_Get_executing()->Wait.return_argument = count; return _Message_queue_MP_Send_request_packet( MESSAGE_QUEUE_MP_GET_NUMBER_PENDING_REQUEST, |