The M_FLUSH message requests all modules and drivers that receive it to flush their message queues (discard all messages in those queues) as indicated in the message. An M_FLUSH can originate at the stream head, or in any module or driver. The first byte of the message contains flags that specify one of the following actions:
FLUSHR — Flush the read queue of the module
FLUSHW — Flush the write queue of the module
FLUSHRW — Flush both the read queue and the write queue of the module
FLUSHBAND — Flush the message according to the priority associated with the band
Each module passes this message to its neighbor after flushing its appropriate queues until the message reaches one of the ends of the stream.
Drivers are expected to include the following processing for M_FLUSH messages. When an M_FLUSH message is sent downstream through the write queues in a stream, the driver at the stream end discards it if the message action indicates that the read queues in the stream are not to be flushed (only FLUSHW set). If the message indicates that the read queues are to be flushed, the driver shuts off the FLUSHW flag, and sends the message up the stream's read queues.
When a flush message is sent up a stream's read side, the stream head checks to see if the write side of the stream is to be flushed. If only FLUSHR is set, the stream head discards the message. However, if the write side of the stream is to be flushed, the stream head sets the M_FLUSH flag to FLUSHW and sends the message down the stream's write side. All modules that queue messages must identify and process this message type.
If FLUSHBAND is set, the second byte of the message contains the value of the priority band to flush.