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

FreeBSD Manual Pages


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

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

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

     seldrain(struct selinfo *sip);

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

     selwakeup(struct selinfo *sip);

     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 oc-
     curs on an	object.

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

     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 broad-
     cast 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, 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.

     poll(2), select(2)

     This manual page was written by Chad David	<> and
     Alfred Perlstein <>.

FreeBSD	13.0			August 25, 2011			  FreeBSD 13.0


Want to link to this manual page? Use this URL:

home | help