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

FreeBSD Manual Pages

  
 
  

home | help
SELRECORD(9)		 BSD 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 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
     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 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.

SEE ALSO
     poll(2), select(2)

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

BSD				August 25, 2011				   BSD

NAME | SYNOPSIS | DESCRIPTION | SEE ALSO | AUTHORS

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

home | help