#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
(for example, an argument of
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.