diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-07-18 18:45:56 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-07-18 18:45:56 +0000 |
commit | 6a0898bba30ccd936e0ac1d6268970316efe92c4 (patch) | |
tree | 364d967bdfcdb75695666e37263cb2f0bed3a077 /cpukit/posix/include/mqueue.h | |
parent | Changed special purpose register inline functions to macros. (diff) | |
download | rtems-6a0898bba30ccd936e0ac1d6268970316efe92c4.tar.bz2 |
2008-07-18 Joel Sherrill <joel.sherrill@oarcorp.com>
PR 1291/cpukit
* itron/inline/rtems/itron/semaphore.inl, itron/src/twai_sem.c,
posix/include/mqueue.h, posix/include/rtems/posix/mqueue.h,
posix/include/rtems/posix/semaphore.h,
posix/include/rtems/posix/time.h, posix/src/condtimedwait.c,
posix/src/mqueuereceive.c, posix/src/mqueuerecvsupp.c,
posix/src/mqueuesend.c, posix/src/mqueuesendsupp.c,
posix/src/mqueuetimedreceive.c, posix/src/mqueuetimedsend.c,
posix/src/mutextimedlock.c, posix/src/mutextranslatereturncode.c,
posix/src/posixtimespecabsolutetimeout.c,
posix/src/prwlocktimedrdlock.c, posix/src/prwlocktimedwrlock.c,
posix/src/semaphoretranslatereturncode.c,
posix/src/semaphorewaitsupp.c, posix/src/semtimedwait.c,
posix/src/semtrywait.c, posix/src/semwait.c,
posix/src/sigtimedwait.c, posix/src/timersettime.c,
posix/src/ualarm.c, rtems/src/semobtain.c,
rtems/src/semtranslatereturncode.c,
score/include/rtems/score/coremutex.h,
score/include/rtems/score/coresem.h, score/src/coresemseize.c: This
patch addresses issues on implementation of the timeout on the
following POSIX services. Some of these services incorrectly took a
timeout as a relative time. Others would compute a 0 delta to timeout
if the absolute time and the current time were equal and thus
incorrectly block the caller forever. The root of the confusion is
that POSIX specifies that if the timeout is incorrect (e.g. in the
past, is now, or is numerically invalid), that it does not matter if
the call would succeed without blocking. This is in contrast to RTEMS
programming style where all errors are checked before any critical
sections are entered. This fix implemented a more uniform way of
handling POSIX absolute time timeouts.
+ pthread_cond_timedwait - could block forever
+ mq_timedreceive - used relative not absolute time
+ mq_timedsend - used relative not absolute time
+ pthread_mutex_timedlock - used relative not absolute time
+ pthread_rwlock_timedrdlock- used relative not absolute time
+ pthread_rwlock_timedwrlock- used relative not absolute time
+ sem_timedwait - could block forever
Diffstat (limited to 'cpukit/posix/include/mqueue.h')
-rw-r--r-- | cpukit/posix/include/mqueue.h | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/cpukit/posix/include/mqueue.h b/cpukit/posix/include/mqueue.h index fe6975016d..c317d0c7bf 100644 --- a/cpukit/posix/include/mqueue.h +++ b/cpukit/posix/include/mqueue.h @@ -3,7 +3,7 @@ */ /* - * COPYRIGHT (c) 1989-2007. + * COPYRIGHT (c) 1989-2008. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -33,47 +33,53 @@ extern "C" { * 15.1.1 Data Structures, P1003.1b-1993, p. 271 */ +/** + * Message queue id type + */ typedef Objects_Id mqd_t; +/** + * This is the message queue attributes structure. + */ struct mq_attr { - long mq_flags; /* Message queue flags */ - long mq_maxmsg; /* Maximum number of messages */ - long mq_msgsize; /* Maximum message size */ - long mq_curmsgs; /* Number of messages currently queued */ + /** This is the message queue flags */ + long mq_flags; + /** This is the maximum number of messages */ + long mq_maxmsg; + /** This is the maximum message size */ + long mq_msgsize; + /** This is the mumber of messages currently queued */ + long mq_curmsgs; }; -/* +/** * 15.2.2 Open a Message Queue, P1003.1b-1993, p. 272 */ - mqd_t mq_open( const char *name, int oflag, ... ); -/* +/** * 15.2.2 Close a Message Queue, P1003.1b-1993, p. 275 */ - int mq_close( mqd_t mqdes ); -/* +/** * 15.2.2 Remove a Message Queue, P1003.1b-1993, p. 276 */ - int mq_unlink( const char *name ); -/* +/** * 15.2.4 Send a Message to a Message Queue, P1003.1b-1993, p. 277 * - * NOTE: P1003.4b/D8, p. 45 adds mq_timedsend(). + * @note P1003.4b/D8, p. 45 adds mq_timedsend(). */ - int mq_send( mqd_t mqdes, const char *msg_ptr, @@ -90,7 +96,7 @@ int mq_timedsend( const char *msg_ptr, size_t msg_len, unsigned int msg_prio, - const struct timespec *timeout + const struct timespec *abstime ); #endif /* _POSIX_TIMEOUTS */ @@ -115,7 +121,7 @@ ssize_t mq_timedreceive( char *msg_ptr, size_t msg_len, unsigned int *msg_prio, - const struct timespec *timeout + const struct timespec *abstime ); #endif /* _POSIX_TIMEOUTS */ |