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