API for Queue flushing

anuradha1 wrote on Wednesday, July 27, 2011:

Hello,
According to API References of FreeRTOS there is no API available for Flushing a Queue.

Search through the post I found that someone has raised a feature Request on this as well.
I am too looking forward for that API and wants to know when it will be available.

Thank you.

rtel wrote on Wednesday, July 27, 2011:

I have just checked in xTaskGetIdleTaskHandle(), xTimerGetTimerTaskHandle(), pcTaskGetTaskName(), and vSemaphoreDelete() macros (previously vQueueDelete() was used, now there is a mapping from vSemaphoreDelete() to vQueueDelete() to make it more obvious).  There will not however be a vQueueFlush() function added.

You can flush a queue by simply looping on an xQueueReceive() until the queue is empty.  There is not, however, a generic way of doing this for the following reasons:

+ Sometimes a queue holds pointers to buffers.  Simply resetting the queue read and write pointers back to their defaults (making the queue look empty) could cause a memory leak if the buffers being pointed to are then left dangling.

+ As queues can hold data of any size (it being set when the queue is created), you cannot define a generic function that loops calling xQueueReceive() because you don’t know what size buffer to receive the data into.

Regards.

anuradha1 wrote on Thursday, July 28, 2011:

Thank you Richard !!!!