SELECT(9) | Kernel Developer's Manual | SELECT(9) |
seldestroy
, selinit
,
selrecord
, selnotify
—
#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);
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.
May 13, 2008 | NetBSD 9.0 |