Provided by: freebsd-manpages_8.2-1_all bug

NAME

     selrecord, selwakeup — record and wakeup select requests

SYNOPSIS

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

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

     void
     selwakeup(struct selinfo *sip);

DESCRIPTION

     selrecord() and selwakeup() are the two 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.

     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.

SEE ALSO

     poll(2), select(2)

AUTHORS

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