Copyright (C) 2002 Chad David <firstname.lastname@example.org>. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice(s), this list of conditions and the following disclaimer as the first lines of this file unmodified other than the possible addition of one or more copyright notices. 2. Redistributions in binary for...
NAMEseldrain selrecord selwakeup - record and wakeup select requests
SYNOPSISIn sys/param.h In sys/selinfo.h Ft void Fn seldrain struct selinfo *sip Ft void Fn selrecord struct thread *td struct selinfo *sip Ft void Fn selwakeup struct selinfo *sip
DESCRIPTIONFn seldrain , Fn selrecord and Fn 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.
Fn 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 Fa sip which will be later dealt with by Fn selwakeup .
Fn selrecord acquires and releases sellock
Fn 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, Fn 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 Fn selwakeup will clear the TDF_SELECT flag which should be noted by select(2) and poll(2) when they wake up.
Fn seldrain will flush the waiters queue on a specified object before its destruction. The object handling code must ensure that Fa *sip cannot be used once Fn seldrain has been called.
The contents of Fa *sip must be zeroed, such as by softc initialization, before any call to Fn selrecord or Fn selwakeup , otherwise a panic may occur. Fn selwakeup acquires and releases sellock and may acquire and release sched_lock Fn seldrain could usually be just a wrapper for Fn selwakeup , but consumers should not generally rely on this feature.