logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

seldrain, selrecord, selwakeup — record and wakeup select requests

Authors

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

Debian                                           August 25, 2011                                    SELRECORD(9)

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

Name

       seldrain, selrecord, selwakeup — record and wakeup select requests

See Also

poll(2), select(2)

Synopsis

#include<sys/param.h>#include<sys/selinfo.h>voidseldrain(structselinfo*sip);

       voidselrecord(structthread*td, structselinfo*sip);

       voidselwakeup(structselinfo*sip);

See Also