source: rtems/cpukit/rtems/src/msgqreceive.c @ 9b4422a2

4.115
Last change on this file since 9b4422a2 was 9b4422a2, checked in by Joel Sherrill <joel.sherrill@…>, on 05/03/12 at 15:09:24

Remove All CVS Id Strings Possible Using a Script

Script does what is expected and tries to do it as
smartly as possible.

+ remove occurrences of two blank comment lines

next to each other after Id string line removed.

+ remove entire comment blocks which only exited to

contain CVS Ids

+ If the processing left a blank line at the top of

a file, it was removed.

  • Property mode set to 100644
File size: 2.6 KB
Line 
1/*
2 *  Message Queue Manager
3 *
4 *
5 *  COPYRIGHT (c) 1989-2007.
6 *  On-Line Applications Research Corporation (OAR).
7 *
8 *  The license and distribution terms for this file may be
9 *  found in the file LICENSE in this distribution or at
10 *  http://www.rtems.com/license/LICENSE.
11 */
12
13#if HAVE_CONFIG_H
14#include "config.h"
15#endif
16
17#include <rtems/system.h>
18#include <rtems/score/sysstate.h>
19#include <rtems/score/chain.h>
20#include <rtems/score/isr.h>
21#include <rtems/score/coremsg.h>
22#include <rtems/score/object.h>
23#include <rtems/score/states.h>
24#include <rtems/score/thread.h>
25#include <rtems/score/wkspace.h>
26#if defined(RTEMS_MULTIPROCESSING)
27#include <rtems/score/mpci.h>
28#endif
29#include <rtems/rtems/status.h>
30#include <rtems/rtems/attr.h>
31#include <rtems/rtems/message.h>
32#include <rtems/rtems/options.h>
33#include <rtems/rtems/support.h>
34
35/*
36 *  rtems_message_queue_receive
37 *
38 *  This directive dequeues a message from the designated message queue
39 *  and copies it into the requesting thread's buffer.
40 *
41 *  Input parameters:
42 *    id         - queue id
43 *    buffer     - pointer to message buffer
44 *    size       - size of message receive
45 *    option_set - options on receive
46 *    timeout    - number of ticks to wait
47 *
48 *  Output parameters:
49 *    RTEMS_SUCCESSFUL - if successful
50 *    error code       - if unsuccessful
51 */
52
53rtems_status_code rtems_message_queue_receive(
54  rtems_id        id,
55  void           *buffer,
56  size_t         *size,
57  rtems_option    option_set,
58  rtems_interval  timeout
59)
60{
61  register Message_queue_Control *the_message_queue;
62  Objects_Locations               location;
63  bool                            wait;
64
65  if ( !buffer )
66    return RTEMS_INVALID_ADDRESS;
67
68  if ( !size )
69    return RTEMS_INVALID_ADDRESS;
70
71  the_message_queue = _Message_queue_Get( id, &location );
72  switch ( location ) {
73
74    case OBJECTS_LOCAL:
75      if ( _Options_Is_no_wait( option_set ) )
76        wait = false;
77      else
78        wait = true;
79
80      _CORE_message_queue_Seize(
81        &the_message_queue->message_queue,
82        the_message_queue->Object.id,
83        buffer,
84        size,
85        wait,
86        timeout
87      );
88      _Thread_Enable_dispatch();
89      return _Message_queue_Translate_core_message_queue_return_code(
90        _Thread_Executing->Wait.return_code
91      );
92
93#if defined(RTEMS_MULTIPROCESSING)
94    case OBJECTS_REMOTE:
95      return _Message_queue_MP_Send_request_packet(
96          MESSAGE_QUEUE_MP_RECEIVE_REQUEST,
97          id,
98          buffer,
99          size,
100          option_set,
101          timeout
102        );
103#endif
104
105    case OBJECTS_ERROR:
106      break;
107  }
108
109  return RTEMS_INVALID_ID;
110}
Note: See TracBrowser for help on using the repository browser.