bcanput(D3)
bcanput - test for flow control in a specified priority band
As shipped in IRIX 6.5.7. Unchanged since IRIX 6.5.
NAME bcanput - test for flow control in a specified priority band SYNOPSIS #include <sys/types.h> #include <sys/stream.h> #include <sys/ddi.h> int bcanput(queue_t *q, uchar_t pri); Arguments q Pointer to the message queue. pri Message priority. DESCRIPTION Like the canput(D3) function, bcanput searches through the stream (starting at q) 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 a message of priority pri can be enqueued. If the band is full, bcanput 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. Return Values bcanput returns 1 if a message of priority pri can be sent in the stream, or 0 if the priority band is flow-controlled. If bcanput reaches the end of the stream without finding a queue with a service routine, then it returns 1. USAGE The driver is responsible for both testing a queue with bcanput and refraining from placing a message on the queue if bcanput fails. It is possible because of race conditions to test for room using bcanput 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. If pri is 0, the bcanput call is equivalent to a call to canput. Level Base or Interrupt. Synchronization Constraints Does not sleep. Driver-defined basic locks, read/write locks, and sleep locks may be held across calls to this function. REFERENCES canput(D3), putbq(D3)