Man

Command Section
SELRECORD(9)           FreeBSD 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
     objects 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 selwakeup().

     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 handle 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,
     before 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 <[email protected]> and
     Alfred Perlstein <[email protected]>.

FreeBSD 11.1-RELEASE-p4         August 25, 2011        FreeBSD 11.1-RELEASE-p4
Command Section