|
|
#include <sys/stream.h> #include <sys/ddi.h>int canputnext(queue_t *q);
q->q_next
)
until it finds a queue containing a service routine,
or until it reaches the end of the stream.
If found, the queue containing the service routine
is tested to see if there is room for a message in the queue.
If the queue is full, canputnext marks the queue to automatically
back-enable the caller's service routine when the amount of data
in messages on the queue has reached its low water mark.
It is possible because of race conditions to test for room using canputnext and get an indication that there is room for a message, and then have the queue fill up before subsequently enqueuing the message, causing a violation of flow control. This is not a problem since the violation of flow control in this case is bounded.
The q argument may not reference q_next
(for example, an argument of q->q_next
is erroneous in a multithreaded driver
and is disallowed by the DDI).
Driver-defined basic locks, read/write locks, and sleep locks may be held across calls to this function.
The caller cannot have the stream frozen (see freezestr(D3str)) when calling this function.