bcanput(D3)bcanput(D3)NAMEbcanput - 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.
Page 1
bcanput(D3)bcanput(D3)REFERENCEScanput(D3), putbq(D3)
Page 2