Changeset 53fb837a in rtems for cpukit/score/inline


Ignore:
Timestamp:
Jan 13, 2000, 7:25:15 PM (20 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
85d62357
Parents:
ee4ddd83
Message:

POSIX message queues now include complete functionality including
blocking sends when the queue is full. The SuperCore? was enhanced
to support blocking on send. The existing POSIX API was debugged
and numerous test cases were added to psxmsgq01 by Jennifer Averett.
SuperCore? enhancements and resulting modifications to other APIs
were done by Joel.

There is one significant point of interpretation for the POSIX API.
What happens to threads already blocked on a message queue when the
mode of that same message queue is changed from blocking to non-blocking?
We decided to unblock all waiting tasks with an EAGAIN error just
as if a non-blocking version of the same operation had returned
unsatisfied. This case is not discussed in the POSIX standard and
other implementations may have chosen differently.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/score/inline/rtems/score/coremsg.inl

    ree4ddd83 r53fb837a  
    2828 */
    2929 
    30 RTEMS_INLINE_ROUTINE CORE_message_queue_Status _CORE_message_queue_Send(
     30RTEMS_INLINE_ROUTINE void _CORE_message_queue_Send(
    3131  CORE_message_queue_Control                *the_message_queue,
    3232  void                                      *buffer,
    3333  unsigned32                                 size,
    3434  Objects_Id                                 id,
    35   CORE_message_queue_API_mp_support_callout  api_message_queue_mp_support
    36 )
    37 {
    38   return _CORE_message_queue_Submit(
     35  CORE_message_queue_API_mp_support_callout  api_message_queue_mp_support,
     36  boolean                                    wait,
     37  Watchdog_Interval                          timeout
     38)
     39{
     40  _CORE_message_queue_Submit(
    3941    the_message_queue,
    4042    buffer,
     
    4648    NULL,
    4749#endif
    48     CORE_MESSAGE_QUEUE_SEND_REQUEST
     50    CORE_MESSAGE_QUEUE_SEND_REQUEST,
     51    wait,     /* sender may block */
     52    timeout   /* timeout interval */
    4953  );
    5054}
     
    5963 */
    6064 
    61 RTEMS_INLINE_ROUTINE CORE_message_queue_Status _CORE_message_queue_Urgent(
     65RTEMS_INLINE_ROUTINE void _CORE_message_queue_Urgent(
    6266  CORE_message_queue_Control                *the_message_queue,
    6367  void                                      *buffer,
    6468  unsigned32                                 size,
    6569  Objects_Id                                 id,
    66   CORE_message_queue_API_mp_support_callout  api_message_queue_mp_support
    67 )
    68 {
    69   return _CORE_message_queue_Submit(
     70  CORE_message_queue_API_mp_support_callout  api_message_queue_mp_support,
     71  boolean                                    wait,
     72  Watchdog_Interval                          timeout
     73)
     74{
     75  _CORE_message_queue_Submit(
    7076    the_message_queue,
    7177    buffer,
     
    7783    NULL,
    7884#endif
    79     CORE_MESSAGE_QUEUE_URGENT_REQUEST
     85    CORE_MESSAGE_QUEUE_URGENT_REQUEST,
     86    wait,     /* sender may block */
     87    timeout   /* timeout interval */
    8088 );
    8189}
Note: See TracChangeset for help on using the changeset viewer.