summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Erik Werner <martinerikwerner@gmail.com>2020-01-19 16:11:38 +0100
committerJoel Sherrill <joel@rtems.org>2020-01-24 08:01:22 -0600
commite22554535796fc29a7ed7c5e2338128e324a621d (patch)
tree738b532ba31f312bd48a691d1914d97ccd389784
parentbsps/arm/shared: Add GICv3 implementation (diff)
downloadrtems-e22554535796fc29a7ed7c5e2338128e324a621d.tar.bz2
Use EAGAIN for POSIX mq wait in ISR error
Modify the status code returned by _CORE_message_queue_Submit() when it detects a wait about to happen in an ISR (which would be deadly) to return a status which translated to EAGAIN instead of ENOMEM. This is only relevant for POSIX message queues, since Classic API message queues cannot block on send. The motivation is to match the "most related" errno value returned from mq_send() and mq_timedsend() according to POSIX, via Open Group: [EAGAIN] The O_NONBLOCK flag is set in the message queue description associated with mqdes, and the specified message queue is full. or via the RTEMS POSIX users documentation EAGAIN The message queue is non-blocking, and there is no room on the queue for another message as specified by the mq_maxmsg. Neither of these matches the case ofi avoided ISR wait perfectly, but they seem to be the closest equivalent, unless it is desirable to keep a new non-standard error for this case. It is presumed that this is not desirable. The previously returned ENOMEM error value is not documented in either the Open Group or the RTEMS POSIX uses documentation. A companion patch corrects the documentation to include this error condition. Based on the discussion in: https://lists.rtems.org/pipermail/devel/2020-January/056891.html closes #3857. Message-Id: <CAF9ehCW5P12ZkZja4UPYTbdBFUyC1VKVL-tU7nyUtvK1Lz2Z3g@mail.gmail.com>
-rw-r--r--cpukit/include/rtems/score/status.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/cpukit/include/rtems/score/status.h b/cpukit/include/rtems/score/status.h
index 34002559aa..fe1f0e87e6 100644
--- a/cpukit/include/rtems/score/status.h
+++ b/cpukit/include/rtems/score/status.h
@@ -90,7 +90,7 @@ typedef enum {
STATUS_MESSAGE_INVALID_SIZE =
STATUS_BUILD( STATUS_CLASSIC_INVALID_SIZE, EMSGSIZE ),
STATUS_MESSAGE_QUEUE_WAIT_IN_ISR =
- STATUS_BUILD( STATUS_CLASSIC_INTERNAL_ERROR, ENOMEM ),
+ STATUS_BUILD( STATUS_CLASSIC_INTERNAL_ERROR, EAGAIN ),
STATUS_MESSAGE_QUEUE_WAS_DELETED =
STATUS_BUILD( STATUS_CLASSIC_OBJECT_WAS_DELETED, EBADF ),
STATUS_MINUS_ONE =