SELRECORD(9)

NAME
selrecord, selwakeup - record and wakeup select requests

SYNOPSIS
#include <sys/param.h>
#include <sys/select.h>
void
selrecord(struct lwp *selector, struct selinfo *sip);
void
selwakeup(struct selinfo *sip);
void
selnotify(struct selinfo *sip, long knhint);

DESCRIPTION
selrecord() and selwakeup() are the two 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().

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 wakeup all threads waiting on the global variable selwait 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 L_SELECT flag which should be noted by select(2) and poll(2) when they wake up.

selwakeup() may acquire and release sched_lock.

selnotify() calls selwakeup() and then calls KNOTE() with knhint. In most cases, selnotify() should be used rather than using selwakeup() directly.

SEE ALSO
poll(2), select(2), knote(9)

AUTHORS
-nosplit This man page was written by Chad David <davidc@FreeBSD.org> and Alfred Perlstein <alfred@FreeBSD.org>.