Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SELRECORD(9)		    Kernel Developer's Manual		    SELRECORD(9)

NAME
     seldrain, selrecord, selwakeup -- record and wakeup select requests

SYNOPSIS
     #include <sys/param.h>
     #include <sys/selinfo.h>

     void
     seldrain(struct selinfo *sip);

     void
     selrecord(struct thread *td, struct selinfo *sip);

     void
     selwakeup(struct selinfo *sip);

DESCRIPTION
     seldrain(),  selrecord()  and  selwakeup()  are the three central functions
     used by select(2), poll(2) and the objects  that  are  being  selected  on.
     They  handle  the	task of recording which threads are waiting on which ob-
     jects and the waking of the proper threads when an event of interest occurs
     on an object.

     selrecord() records that the calling thread is interested in events related
     to a given object.  If another thread is already waiting on  the  object  a
     collision	will  be  flagged  in sip which will be later dealt with by sel-
     wakeup().

     selrecord() acquires and releases sellock.

     selwakeup() is called by the underlying object handling code  in  order  to
     notify  any  waiting  threads that an event of interest has occurred.  If a
     collision has occurred, selwakeup() will increment nselcoll, and  broadcast
     on the global cv in order to wake all waiting threads so that they can han-
     dle  it.	If the thread waiting on the object is not currently sleeping or
     the wait channel is not selwait, selwakeup() will clear the TDF_SELECT flag
     which should be noted by select(2) and poll(2) when they wake up.

     seldrain() will flush the waiters queue on a specified  object  before  its
     destruction.  The object handling code must ensure that *sip cannot be used
     once seldrain() has been called.

     The  contents  of *sip must be zeroed, such as by softc initialization, be-
     fore any call to selrecord() or selwakeup(), otherwise a panic  may  occur.
     selwakeup()  acquires  and  releases  sellock  and  may acquire and release
     sched_lock.  seldrain() could usually be just a  wrapper  for  selwakeup(),
     but consumers should not generally rely on this feature.

SEE ALSO
     poll(2), select(2)

AUTHORS
     This  manual page was written by Chad David <davidc@FreeBSD.org> and Alfred
     Perlstein <alfred@FreeBSD.org>.

FreeBSD ports 15.quarterly	 August 25, 2011		    SELRECORD(9)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=selrecord&sektion=9&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help