rtems_status_code rtems_message_queue_delete( rtems_id id );
RTEMS_SUCCESSFUL
- queue deleted successfully
RTEMS_INVALID_ID
- invalid queue id
RTEMS_ILLEGAL_ON_REMOTE_OBJECT
- cannot delete remote queue
This directive deletes the message queue specified by id. As a result of this directive, all tasks blocked waiting to receive a message from this queue will be readied and returned a status code which indicates that the message queue was deleted. If no tasks are waiting, but the queue contains messages, then RTEMS returns these message buffers back to the system message buffer pool. The QCB for this queue as well as the memory for the message buffers is reclaimed by RTEMS.
The calling task will be preempted if its preemption mode is enabled and one or more local tasks with a higher priority than the calling task are waiting on the deleted queue. The calling task will NOT be preempted if the tasks that are waiting are remote tasks.
The calling task does not have to be the task that created the queue, although the task and queue must reside on the same node.
When the queue is deleted, any messages in the queue are returned to the free message buffer pool. Any information stored in those messages is lost.
When a global message queue is deleted, the message queue id must be transmitted to every node in the system for deletion from the local copy of the global object table.
Proxies, used to represent remote tasks, are reclaimed when the message queue is deleted.
Copyright © 1988-2008 OAR Corporation