seldrain(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
pthread_rwlock_unlock(3) Library Functions Manual pthread_rwlock_unlock(3) NAME
pthread_rwlock_unlock - Unlock a read-write lock. LIBRARY
DECthreads POSIX 1003.1c Library (libpthread.so) SYNOPSIS
#include <pthread.h> int pthread_rwlock_unlock( pthread_rwlock_t *rwlock); PARAMETERS
Address of the read-write lock to be unlocked. DESCRIPTION
This routine releases a lock acquisition held on the read-write lock object referenced by rwlock. Results are undefined if rwlock is not held by the calling thread. If this routine is called to release a lock for read access on rwlock and the calling thread also currently holds other locks for read access on rwlock, the read-write lock object remains in the read locked state. If this routine releases the calling thread's last lock for read access on rwlock, the calling thread is not longer one of the owners of the lock object. If this routine is called to release a lock for write access on rwlock, the lock object is put in the unlocked state with no owners. If a call to this routine results in the read-write lock object becoming unlocked and there are multiple thread waiting to acquire that lock for write access, DECthreads uses the scheduling policy of those waiting threads to determine which thread next acquires the lock object for write access. If there are multiple thread waiting to acquire the read-write lock object for read access, DECthreads uses the scheduling policy of those waiting threads to determine the order in which those threads acquire the lock for read access. If there are multiple threads waiting to acquire the read-write lock object for both read and write access, it is unspecified whether a thread waiting for read access or for write access next acquires the lock object. If the read-write lock object referenced by rwlock is not initialized, the results of calling this routine are undefined. RETURN VALUES
If an error condition occurs, this routine returns an integer value indicating the type of error. Possible return values are as follows: Successful completion. The values specified by rwlock does not refer to an initialized read-write lock object. The current thread does not hold the read-write lock object. ERRORS
None RELATED INFORMATION
Functions: pthread_rwlock_init(3), pthread_rwlock_rdlock(3), pthread_rwlock_wrlock(3), pthread_rwlockattr_init(3) Manuals: Guide to DECthreads and Programmer's Guide delim off pthread_rwlock_unlock(3)