bcanput(D3)

bcanput - test for flow control in a specified priority band

As shipped in IRIX 6.5.15. 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)