FREEB(9F) Kernel Functions for Drivers FREEB(9F)
freeb - free a message block
#include <sys/stream.h>
void freeb(mblk_t *bp);
bp
Pointer to the message block to be deallocated. mblk_t is an
instance of the msgb(9S) structure.
Architecture independent level 1 (DDI/DKI).
The freeb() function deallocates a message block. If the reference
count of the db_ref member of the datab(9S) structure is greater than
1, freeb() decrements the count. If db_ref equals 1, it deallocates
the message block and the corresponding data block and buffer.
If the data buffer to be freed was allocated with the esballoc(9F),
the buffer may be a non-STREAMS resource. In that case, the driver
must be notified that the attached data buffer needs to be freed, and
run its own freeing routine. To make this process independent of the
driver used in the stream, freeb() finds the free_rtn(9S) structure
associated with the buffer. The free_rtn structure contains a pointer
to the driver-dependent routine, which releases the buffer. Once this
is accomplished, freeb() releases the STREAMS resources associated
with the buffer.
The freeb() function can be called from user, interrupt, or kernel
context.
See copyb(9F) for an example of using freeb().
allocb(9F), copyb(9F), dupb(9F), esballoc(9F), free_rtn(9S)
Writing Device Drivers
STREAMS Programming Guide
January 16, 2006 FREEB(9F)
NAME
freeb - free a message block
SYNOPSIS
#include <sys/stream.h>
void freeb(mblk_t *bp);
PARAMETERS
bp
Pointer to the message block to be deallocated. mblk_t is an
instance of the msgb(9S) structure.
INTERFACE LEVEL
Architecture independent level 1 (DDI/DKI).
DESCRIPTION
The freeb() function deallocates a message block. If the reference
count of the db_ref member of the datab(9S) structure is greater than
1, freeb() decrements the count. If db_ref equals 1, it deallocates
the message block and the corresponding data block and buffer.
If the data buffer to be freed was allocated with the esballoc(9F),
the buffer may be a non-STREAMS resource. In that case, the driver
must be notified that the attached data buffer needs to be freed, and
run its own freeing routine. To make this process independent of the
driver used in the stream, freeb() finds the free_rtn(9S) structure
associated with the buffer. The free_rtn structure contains a pointer
to the driver-dependent routine, which releases the buffer. Once this
is accomplished, freeb() releases the STREAMS resources associated
with the buffer.
CONTEXT
The freeb() function can be called from user, interrupt, or kernel
context.
EXAMPLES
Example 1: Using freeb()
See copyb(9F) for an example of using freeb().
SEE ALSO
allocb(9F), copyb(9F), dupb(9F), esballoc(9F), free_rtn(9S)
Writing Device Drivers
STREAMS Programming Guide
January 16, 2006 FREEB(9F)