qwait_sig man page on SmartOS

Man page or keyword search:  
man Server   16655 pages
apropos Keyword Search (all sections)
Output format
SmartOS logo
[printable version]

QWAIT(9F)							     QWAIT(9F)

NAME
       qwait, qwait_sig - STREAMS wait routines

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

       void qwait(queue_t *q);

       int qwait_sig(queue_t *q);

INTERFACE LEVEL
       Solaris DDI specific (Solaris DDI).

PARAMETERS
       qp
	     Pointer to the queue that is being opened or closed.

DESCRIPTION
       qwait() and qwait_sig() are used to wait for a message to arrive to the
       put(9E) or srv(9E) procedures. qwait() and qwait_sig() can also be used
       to  wait	 for  qbufcall(9F) or qtimeout(9F) callback procedures to exe‐
       cute. These routines can be used in the open(9E) and  close(9E)	proce‐
       dures in a STREAMS driver or module.

       The  thread that calls close() does not necessarily have the ability to
       receive signals, particularly when called by  exit(2).  In  this	 case,
       qwait_sig()   behaves  exactly  as  qwait().  Driver  writers  may  use
       ddi_can_receive_sig(9F) to determine when this is the case, and, if so,
       arrange	some  means  to	 avoid	blocking indefinitely (for example, by
       using qtimeout(9F).

       qwait() and qwait_sig() atomically exit the inner and outer  perimeters
       associated  with the queue, and wait for a thread to leave the module's
       put(9E), srv(9E), or qbufcall(9F) / qtimeout(9F)	 callback  procedures.
       Upon return they re-enter the inner and outer perimeters.

       This  can  be  viewed  as  there being an implicit wakeup when a thread
       leaves a put(9E) or srv(9E) procedure or after a qtimeout(9F) or	 qbuf‐
       call(9F) callback procedure has been run in the same perimeter.

       qprocson(9F) must be called before calling qwait() or qwait_sig().

       qwait()	is  not interrupted by a signal, whereas qwait_sig() is inter‐
       rupted by a signal. qwait_sig() normally returns non-zero, and  returns
       zero when the waiting was interrupted by a signal.

       qwait()	and  qwait_sig()  are  similar	to cv_wait() and cv_wait_sig()
       except that the mutex is replaced by the inner and outer perimeters and
       the  signalling	is  implicit when a thread leaves the inner perimeter.
       See condvar(9F).

RETURN VALUES
       0
	    For qwait_sig(), indicates that the condition was not  necessarily
	    signaled, and the function returned because a signal was pending.

CONTEXT
       These  functions	 can only be called from an open(9E) or close(9E) rou‐
       tine.

EXAMPLES
       Example 1 Using qwait()

       The open routine sends down a T_INFO_REQ	 message  and  waits  for  the
       T_INFO_ACK.  The	 arrival  of the T_INFO_ACK is recorded by resetting a
       flag in the unit structure (WAIT_INFO_ACK). The	example	 assumes  that
       the module is D_MTQPAIR or D_MTPERMOD.

	 xxopen(qp, ...)
		queue_t *qp;
	 {
		    struct xxdata *xx;
		     /* Allocate xxdata structure */
		qprocson(qp);
		/* Format T_INFO_ACK in mp */
		putnext(qp, mp);
		xx->xx_flags |= WAIT_INFO_ACK;
		while (xx->xx_flags & WAIT_INFO_ACK)
			       qwait(qp);
		    return (0);
	 }
	 xxrput(qp, mp)
		queue_t *qp;
		mblk_t *mp;
	 {
		struct xxdata *xx = (struct xxdata *)q->q_ptr;

		    ...

		    case T_INFO_ACK:
			       if (xx->xx_flags & WAIT_INFO_ACK) {
				      /* Record information from info ack */
				      xx->xx_flags &= ~WAIT_INFO_ACK;
				      freemsg(mp);
				      return;
			       }

		    ...
	 }

SEE ALSO
       close(9E),      open(9E),      put(9E),	    srv(9E),	  condvar(9F),
       ddi_can_receive_sig(9F),	 mt-streams(9F),  qbufcall(9F),	 qprocson(9F),
       qtimeout(9F)

       STREAMS Programming Guide

       Writing Device Drivers

				 Dec 15, 2003			     QWAIT(9F)
[top]

List of man pages available for SmartOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net