NAME
seldrain, selrecord, selwakeup — record and wakeup select requestsSYNOPSIS
#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 theTDF_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]>.August 25, 2011 | Debian |