qwriter(9F)




NAME

     qwriter - asynchronous STREAMS perimeter upgrade


SYNOPSIS

     #include <sys/stream.h>
     #include <sys/ddi.h>

     void qwriter(queue_t *qp, mblk_t *mp,  void  (*func)(),  int
     perimeter);


INTERFACE LEVEL

     Solaris DDI specific (Solaris DDI).


PARAMETERS

     qp    Pointer to the queue.

     mp    Pointer to a message that will be  passed  in  to  the
           callback function.

     func  A function that will be called when exclusive (writer)
           access has been acquired at the specified perimeter.

     perimeter
           Either PERIM_INNER or PERIM_OUTER.


DESCRIPTION

     qwriter() is used to upgrade the access at either the  inner
     or the outer perimeter from shared to exclusive and call the
     specified callback function when the upgrade has  succeeded.
     See mt-streams(9F). The callback function is called as:

     (*func)(queue_t *qp, mblk_t *mp);

     qwriter() will acquire exclusive access immediately if  pos-
     sible, in which case the specified callback function will be
     executed before qwriter() returns. If this is not  possible,
     qwriter()  will  defer  the  upgrade  until later and return
     before the callback  function  has  been  executed.  Modules
     should  not  assume that the callback function has been exe-
     cuted when qwriter() returns. One way to avoid  dependencies
     on  the execution of the callback function is to immediately
     return after calling qwriter() and let the callback function
     finish the processing of the message.

     When qwriter() defers calling  the  callback  function,  the
     STREAMS  framework will prevent other messages from entering
     the inner perimeter associated  with  the  queue  until  the
     upgrade has completed and the callback function has finished
     executing.


CONTEXT


     qwriter() can only be called from an put(9E) or srv(9E) rou-
     tine,  or  from  a  qwriter(), qtimeout(9F), or qbufcall(9F)
     callback function.


SEE ALSO

     put(9E), srv(9E), mt-streams(9F), qbufcall(9F), qtimeout(9F)

     STREAMS Programming Guide

     Writing Device Drivers


Man(1) output converted with man2html