Possible error in rtems_message_queue_send.
Wendell Pereira da Silva
wendell.silva at compsisnet.com.br
Wed May 20 22:07:12 UTC 2009
Hi Joel,
After a lot of time in test effort of an application (based on RTEMS
4.8.0), I've found a strange behavior in rtems_message_queue_send().
The context is illustrated as follows:
lenStatus = rtems_message_queue_send(mqID, &Msg, sizeof(Msg));
if (lenStatus != RTEMS_SUCCESSFUL)
{
errorRecovery(...);
}
This code works fines if mqID identifies a valid message queue object
with enough space. But a bug in my application turned mqID a valid TASK
id. So, it was expected that the errorRecovery() function should be
called but, surprisingly, rtems_message_queue_send() returned
RTEMS_SUCCESSFUL (!).
Digging into the RTEMS source from rtems_message_queue_send(), I figured
out that only the index part the object id (the last significant 16-bit)
is used to find the object's entry in the information->local_table
(objectget.c). So, what happened was simply a coincidence: an index of a
Task Object fit to index a Queue Object.
What is the right way to fix this?
Solutions:
(1) To put more complexity in rtems_message_queue_send() - hgrrr!. That
is, code for verifying if the ID is really a queue id;
(2) Move such verification code to the application level.
Att.
Wendell Pereira da Silva
COMPSIS Computadores e Sistemas Ind. e Com. Ltda.
Aerospace Systems | [12] 2139-3966 ext. 977 | www.compsis.com.br
<http://www.compsis.com.br/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20090520/1f1fe84a/attachment.html>
More information about the users
mailing list