Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

selrecord(9) [freebsd man page]

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

Check Out this Related Man Page

SELECT(9)						   BSD Kernel Developer's Manual						 SELECT(9)

NAME
seldestroy, selinit, selrecord, selnotify -- select and poll subsystem SYNOPSIS
#include <sys/param.h> #include <sys/select.h> void seldestroy(struct selinfo *sip); void selinit(struct selinfo *sip); void selrecord(struct lwp *selector, struct selinfo *sip); void selnotify(struct selinfo *sip, int events, long knhint); DESCRIPTION
selinit() and seldestroy() functions must be used to initialize and destroy the struct selinfo. The seldestroy() function may block. selrecord() and selnotify() are used by device drivers to coordinate with the kernel implementation of select(2) and poll(2). Each object that can be polled contains a selinfo record. Device drivers provide locking for the selinfo record. selrecord() records that the calling thread is interested in events related to a given object. selrecord() should only be called when the poll routine determines that the object is not ready for I/O: there are no events of interest pending. The check for pending I/O and call to selrecord() must be atomic. Atomicity can be provided by holding the object's lock across the test and call to selrecord(). For non-MPSAFE drivers, the global kernel_lock is enough to provide atomicity. selnotify() is called by the underlying object handling code in order to notify any waiting threads that an event of interest has occurred. The same lock held across the poll method and call to selrecord() must be held across the call to selnotify(). The lock prevents an event of interest being signalled while a thread is in the process of recording its interest. The events indicates which event happen. Zero may be used if unknown. selnotify() also calls KNOTE() passing knhint as an argument. CODE REFERENCES
The core of the select and poll subsystem implementation is in sys/kern/sys_select.c. Data structures and function prototypes are located in sys/sys/select.h, sys/sys/poll.h and sys/sys/selinfo.h. SEE ALSO
poll(2), select(2), knote(9) BSD
May 13, 2008 BSD
Man Page