selrecord, selwakeup -- record and wakeup select requests
#include <sys/param.h>
#include <sys/selinfo.h>
void
selrecord(struct thread *td, struct selinfo *sip);
void
selwakeup(struct selinfo *sip);
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.
selwakeup() acquires and releases sellock and may acquire and release
sched_lock.
poll(2), select(2)
This man page was written by Chad David <[email protected]> and Alfred
Perlstein <[email protected]>.
FreeBSD 5.2.1 March 20, 2002 FreeBSD 5.2.1 [ Back ] |