14ce04b3dSJohn-Mark Gurney.\" Copyright 2006,2011 John-Mark Gurney 290db62acSJohn-Mark Gurney.\" All rights reserved. 390db62acSJohn-Mark Gurney.\" 490db62acSJohn-Mark Gurney.\" Redistribution and use in source and binary forms, with or without 590db62acSJohn-Mark Gurney.\" modification, are permitted provided that the following conditions 690db62acSJohn-Mark Gurney.\" are met: 790db62acSJohn-Mark Gurney.\" 1. Redistributions of source code must retain the above copyright 890db62acSJohn-Mark Gurney.\" notice, this list of conditions and the following disclaimer. 990db62acSJohn-Mark Gurney.\" 2. Redistributions in binary form must reproduce the above copyright 1090db62acSJohn-Mark Gurney.\" notice, this list of conditions and the following disclaimer in the 1190db62acSJohn-Mark Gurney.\" documentation and/or other materials provided with the distribution. 1290db62acSJohn-Mark Gurney.\" 1390db62acSJohn-Mark Gurney.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1490db62acSJohn-Mark Gurney.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1590db62acSJohn-Mark Gurney.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1690db62acSJohn-Mark Gurney.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1790db62acSJohn-Mark Gurney.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1890db62acSJohn-Mark Gurney.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 1990db62acSJohn-Mark Gurney.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2090db62acSJohn-Mark Gurney.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2190db62acSJohn-Mark Gurney.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2290db62acSJohn-Mark Gurney.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2390db62acSJohn-Mark Gurney.\" SUCH DAMAGE. 2490db62acSJohn-Mark Gurney.\" 2590db62acSJohn-Mark Gurney.\" $FreeBSD$ 2690db62acSJohn-Mark Gurney.\" 27*3454a7caSRobert Wing.Dd August 20, 2022 2890db62acSJohn-Mark Gurney.Dt KQUEUE 9 2990db62acSJohn-Mark Gurney.Os 3090db62acSJohn-Mark Gurney.Sh NAME 3174a603ebSRuslan Ermilov.Nm kqueue_add_filteropts , kqueue_del_filteropts , 3274a603ebSRuslan Ermilov.Nm kqfd_register , 3374a603ebSRuslan Ermilov.Nm knote_fdclose , 34*3454a7caSRobert Wing.Nm knlist_init , knlist_init_mtx , 3574a603ebSRuslan Ermilov.Nm knlist_add , knlist_remove , knlist_remove_inevent , knlist_empty , 364ce04b3dSJohn-Mark Gurney.Nm knlist_clear , knlist_delete , knlist_destroy , 3790db62acSJohn-Mark Gurney.Nm KNOTE_LOCKED , KNOTE_UNLOCKED 3874a603ebSRuslan Ermilov.Nd "event delivery subsystem" 3990db62acSJohn-Mark Gurney.Sh SYNOPSIS 4090db62acSJohn-Mark Gurney.In sys/event.h 4190db62acSJohn-Mark Gurney.Ft int 4274a603ebSRuslan Ermilov.Fn kqueue_add_filteropts "int filt" "struct filterops *filtops" 4390db62acSJohn-Mark Gurney.Ft int 4490db62acSJohn-Mark Gurney.Fn kqueue_del_filteropts "int filt" 4590db62acSJohn-Mark Gurney.Ft int 4674a603ebSRuslan Ermilov.Fn kqfd_register "int fd" "struct kevent *kev" "struct thread *td" "int waitok" 4790db62acSJohn-Mark Gurney.Ft void 4874a603ebSRuslan Ermilov.Fn knote_fdclose "struct thread *td" "int fd" 4990db62acSJohn-Mark Gurney.Ft void 5074a603ebSRuslan Ermilov.Fo knlist_init 5174a603ebSRuslan Ermilov.Fa "struct knlist *knl" 5274a603ebSRuslan Ermilov.Fa "void *lock" 5374a603ebSRuslan Ermilov.Fa "void \*[lp]*kl_lock\*[rp]\*[lp]void *\*[rp]" 5474a603ebSRuslan Ermilov.Fa "void \*[lp]*kl_unlock\*[rp]\*[lp]void *\*[rp]" 5574a603ebSRuslan Ermilov.Fa "int \*[lp]*kl_locked\*[rp]\*[lp]void *\*[rp]" 5674a603ebSRuslan Ermilov.Fc 5790db62acSJohn-Mark Gurney.Ft void 584ce04b3dSJohn-Mark Gurney.Fn knlist_init_mtx "struct knlist *knl" "struct mtx *lock" 594ce04b3dSJohn-Mark Gurney.Ft void 604ce04b3dSJohn-Mark Gurney.Fn knlist_add "struct knlist *knl" "struct knote *kn" "int islocked" 614ce04b3dSJohn-Mark Gurney.Ft void 624ce04b3dSJohn-Mark Gurney.Fn knlist_remove "struct knlist *knl" "struct knote *kn" "int islocked" 634ce04b3dSJohn-Mark Gurney.Ft void 644ce04b3dSJohn-Mark Gurney.Fn knlist_remove_inevent "struct knlist *knl" "struct knote *kn" 654ce04b3dSJohn-Mark Gurney.Ft int 664ce04b3dSJohn-Mark Gurney.Fn knlist_empty "struct knlist *knl" 6790db62acSJohn-Mark Gurney.Ft void 6874a603ebSRuslan Ermilov.Fn knlist_clear "struct knlist *knl" "int islocked" 6990db62acSJohn-Mark Gurney.Ft void 7074a603ebSRuslan Ermilov.Fn knlist_delete "struct knlist *knl" "struct thread *td" "int islocked" 7190db62acSJohn-Mark Gurney.Ft void 724ce04b3dSJohn-Mark Gurney.Fn knlist_destroy "struct knlist *knl" 734ce04b3dSJohn-Mark Gurney.Ft void 7474a603ebSRuslan Ermilov.Fn KNOTE_LOCKED "struct knlist *knl" "long hint" 7590db62acSJohn-Mark Gurney.Ft void 7674a603ebSRuslan Ermilov.Fn KNOTE_UNLOCKED "struct knlist *knl" "long hint" 7790db62acSJohn-Mark Gurney.Sh DESCRIPTION 7890db62acSJohn-Mark GurneyThe functions 7990db62acSJohn-Mark Gurney.Fn kqueue_add_filteropts 8090db62acSJohn-Mark Gurneyand 8190db62acSJohn-Mark Gurney.Fn kqueue_del_filteropts 8274a603ebSRuslan Ermilovallow for the addition and removal of a filter type. 8374a603ebSRuslan ErmilovThe filter is statically defined by the 8490db62acSJohn-Mark Gurney.Dv EVFILT_* 8590db62acSJohn-Mark Gurneymacros. 8690db62acSJohn-Mark GurneyThe function 8790db62acSJohn-Mark Gurney.Fn kqueue_add_filteropts 8874a603ebSRuslan Ermilovwill make 8974a603ebSRuslan Ermilov.Fa filt 9074a603ebSRuslan Ermilovavailable. 9174a603ebSRuslan ErmilovThe 9290db62acSJohn-Mark Gurney.Vt "struct filterops" 9390db62acSJohn-Mark Gurneyhas the following members: 9490db62acSJohn-Mark Gurney.Bl -tag -width ".Va f_attach" 9590db62acSJohn-Mark Gurney.It Va f_isfd 9690db62acSJohn-Mark GurneyIf 9790db62acSJohn-Mark Gurney.Va f_isfd 9890db62acSJohn-Mark Gurneyis set, 9990db62acSJohn-Mark Gurney.Va ident 10090db62acSJohn-Mark Gurneyin 10190db62acSJohn-Mark Gurney.Vt "struct kevent" 10290db62acSJohn-Mark Gurneyis taken to be a file descriptor. 10374a603ebSRuslan ErmilovIn this case, the 10474a603ebSRuslan Ermilov.Vt knote 10574a603ebSRuslan Ermilovpassed into 10690db62acSJohn-Mark Gurney.Va f_attach 10790db62acSJohn-Mark Gurneywill have the 10890db62acSJohn-Mark Gurney.Va kn_fp 10974a603ebSRuslan Ermilovmember initialized to the 11090db62acSJohn-Mark Gurney.Vt "struct file *" 11174a603ebSRuslan Ermilovthat represents the file descriptor. 11290db62acSJohn-Mark Gurney.It Va f_attach 11390db62acSJohn-Mark GurneyThe 11490db62acSJohn-Mark Gurney.Va f_attach 11574a603ebSRuslan Ermilovfunction will be called when attaching a 11690db62acSJohn-Mark Gurney.Vt knote 11790db62acSJohn-Mark Gurneyto the object. 11890db62acSJohn-Mark GurneyThe method should call 11990db62acSJohn-Mark Gurney.Fn knlist_add 12090db62acSJohn-Mark Gurneyto add the 12190db62acSJohn-Mark Gurney.Vt knote 12274a603ebSRuslan Ermilovto the list that was initialized with 12390db62acSJohn-Mark Gurney.Fn knlist_init . 12490db62acSJohn-Mark GurneyThe call to 12590db62acSJohn-Mark Gurney.Fn knlist_add 12674a603ebSRuslan Ermilovis only necessary if the object can have multiple 12774a603ebSRuslan Ermilov.Vt knotes 12874a603ebSRuslan Ermilovassociated with it. 12990db62acSJohn-Mark GurneyIf there is no 13090db62acSJohn-Mark Gurney.Vt knlist 13190db62acSJohn-Mark Gurneyto call 13290db62acSJohn-Mark Gurney.Fn knlist_add 13390db62acSJohn-Mark Gurneywith, the function 13490db62acSJohn-Mark Gurney.Va f_attach 13590db62acSJohn-Mark Gurneymust clear the 13690db62acSJohn-Mark Gurney.Dv KN_DETACHED 13790db62acSJohn-Mark Gurneybit of 13890db62acSJohn-Mark Gurney.Va kn_status 13990db62acSJohn-Mark Gurneyin the 14074a603ebSRuslan Ermilov.Vt knote . 1414ce04b3dSJohn-Mark GurneyThe function shall return 0 on success, or appropriate error for the failure, 1424ce04b3dSJohn-Mark Gurneysuch as when the object is being destroyed, or does not exist. 14374a603ebSRuslan ErmilovDuring 14474a603ebSRuslan Ermilov.Va f_attach , 14590db62acSJohn-Mark Gurneyit is valid to change the 14608580603SKyle Evans.Va kn_fop 14790db62acSJohn-Mark Gurneypointer to a different pointer. 14890db62acSJohn-Mark GurneyThis will change the 14990db62acSJohn-Mark Gurney.Va f_event 15090db62acSJohn-Mark Gurneyand 15190db62acSJohn-Mark Gurney.Va f_detach 15274a603ebSRuslan Ermilovfunctions called when processing the 15374a603ebSRuslan Ermilov.Vt knote . 15490db62acSJohn-Mark Gurney.It Va f_detach 15590db62acSJohn-Mark GurneyThe 15690db62acSJohn-Mark Gurney.Va f_detach 15774a603ebSRuslan Ermilovfunction will be called to detach the 15890db62acSJohn-Mark Gurney.Vt knote 15990db62acSJohn-Mark Gurneyif the 16090db62acSJohn-Mark Gurney.Vt knote 16190db62acSJohn-Mark Gurneyhas not already been detached by a call to 1624ce04b3dSJohn-Mark Gurney.Fn knlist_remove , 1634ce04b3dSJohn-Mark Gurney.Fn knlist_remove_inevent 1644ce04b3dSJohn-Mark Gurneyor 1654ce04b3dSJohn-Mark Gurney.Fn knlist_delete . 1664ce04b3dSJohn-Mark GurneyThe list 1674ce04b3dSJohn-Mark Gurney.Fa lock 1684ce04b3dSJohn-Mark Gurneywill not be held when this function is called. 16990db62acSJohn-Mark Gurney.It Va f_event 17090db62acSJohn-Mark GurneyThe 17190db62acSJohn-Mark Gurney.Va f_event 17274a603ebSRuslan Ermilovfunction will be called to update the status of the 17390db62acSJohn-Mark Gurney.Vt knote . 17490db62acSJohn-Mark GurneyIf the function returns 0, it will be assumed that the object is not 17590db62acSJohn-Mark Gurneyready (or no longer ready) to be woken up. 17674a603ebSRuslan ErmilovThe 17774a603ebSRuslan Ermilov.Fa hint 17874a603ebSRuslan Ermilovargument will be 0 when scanning 17974a603ebSRuslan Ermilov.Vt knotes 18074a603ebSRuslan Ermilovto see which are triggered. 18174a603ebSRuslan ErmilovOtherwise, the 18274a603ebSRuslan Ermilov.Fa hint 18374a603ebSRuslan Ermilovargument will be the value passed to either 18490db62acSJohn-Mark Gurney.Dv KNOTE_LOCKED 18590db62acSJohn-Mark Gurneyor 18690db62acSJohn-Mark Gurney.Dv KNOTE_UNLOCKED . 18790db62acSJohn-Mark GurneyThe 18890db62acSJohn-Mark Gurney.Va kn_data 18990db62acSJohn-Mark Gurneyvalue should be updated as necessary to reflect the current value, such as 19090db62acSJohn-Mark Gurneynumber of bytes available for reading, or buffer space available for writing. 19190db62acSJohn-Mark GurneyIf the note needs to be removed, 19290db62acSJohn-Mark Gurney.Fn knlist_remove_inevent 19390db62acSJohn-Mark Gurneymust be called. 19490db62acSJohn-Mark GurneyThe function 19590db62acSJohn-Mark Gurney.Fn knlist_remove_inevent 19690db62acSJohn-Mark Gurneywill remove the note from the list, the 19790db62acSJohn-Mark Gurney.Va f_detach 19874a603ebSRuslan Ermilovfunction will not be called and the 19974a603ebSRuslan Ermilov.Vt knote 20090db62acSJohn-Mark Gurneywill not be returned as an event. 201cd457d4eSJohn-Mark Gurney.Pp 202cd457d4eSJohn-Mark GurneyLocks 203cd457d4eSJohn-Mark Gurney.Em must not 20499be3bc6SJohn-Mark Gurneybe acquired in 205cd457d4eSJohn-Mark Gurney.Va f_event . 206cd457d4eSJohn-Mark GurneyIf a lock is required in 207cd457d4eSJohn-Mark Gurney.Va f_event , 208cd457d4eSJohn-Mark Gurneyit must be obtained in the 209cd457d4eSJohn-Mark Gurney.Fa kl_lock 210cd457d4eSJohn-Mark Gurneyfunction of the 211cd457d4eSJohn-Mark Gurney.Vt knlist 212cd457d4eSJohn-Mark Gurneythat the 213cd457d4eSJohn-Mark Gurney.Va knote 214cd457d4eSJohn-Mark Gurneywas added to. 21590db62acSJohn-Mark Gurney.El 21690db62acSJohn-Mark Gurney.Pp 21790db62acSJohn-Mark GurneyThe function 21890db62acSJohn-Mark Gurney.Fn kqfd_register 21990db62acSJohn-Mark Gurneywill register the 22090db62acSJohn-Mark Gurney.Vt kevent 22190db62acSJohn-Mark Gurneyon the kqueue file descriptor 22290db62acSJohn-Mark Gurney.Fa fd . 22374a603ebSRuslan ErmilovIf it is safe to sleep, 22474a603ebSRuslan Ermilov.Fa waitok 22574a603ebSRuslan Ermilovshould be set. 22690db62acSJohn-Mark Gurney.Pp 22790db62acSJohn-Mark GurneyThe function 22890db62acSJohn-Mark Gurney.Fn knote_fdclose 22990db62acSJohn-Mark Gurneyis used to delete all 23090db62acSJohn-Mark Gurney.Vt knotes 23190db62acSJohn-Mark Gurneyassociated with 23290db62acSJohn-Mark Gurney.Fa fd . 23374a603ebSRuslan ErmilovOnce returned, there will no longer be any 23490db62acSJohn-Mark Gurney.Vt knotes 23590db62acSJohn-Mark Gurneyassociated with the 23690db62acSJohn-Mark Gurney.Fa fd . 23790db62acSJohn-Mark GurneyThe 23890db62acSJohn-Mark Gurney.Vt knotes 23990db62acSJohn-Mark Gurneyremoved will never be returned from a 24090db62acSJohn-Mark Gurney.Xr kevent 2 24190db62acSJohn-Mark Gurneycall, so if userland uses the 24290db62acSJohn-Mark Gurney.Vt knote 24390db62acSJohn-Mark Gurneyto track resources, they will be leaked. 24490db62acSJohn-Mark GurneyThe 24590db62acSJohn-Mark Gurney.Fn FILEDESC_LOCK 24674a603ebSRuslan Ermilovlock must be held over the call to 24790db62acSJohn-Mark Gurney.Fn knote_fdclose 24890db62acSJohn-Mark Gurneyso that file descriptors cannot be added or removed. 24990db62acSJohn-Mark Gurney.Pp 25090db62acSJohn-Mark GurneyThe 25190db62acSJohn-Mark Gurney.Fn knlist_* 25274a603ebSRuslan Ermilovfamily of functions are for managing 25374a603ebSRuslan Ermilov.Vt knotes 25474a603ebSRuslan Ermilovassociated with an object. 25590db62acSJohn-Mark GurneyA 25674a603ebSRuslan Ermilov.Vt knlist 25790db62acSJohn-Mark Gurneyis not required, but is commonly used. 25890db62acSJohn-Mark GurneyIf used, the 25990db62acSJohn-Mark Gurney.Vt knlist 2604ce04b3dSJohn-Mark Gurneymust be initialized with either 261*3454a7caSRobert Wing.Fn knlist_init 2624ce04b3dSJohn-Mark Gurneyor 263*3454a7caSRobert Wing.Fn knlist_init_mtx . 26490db62acSJohn-Mark GurneyThe 26590db62acSJohn-Mark Gurney.Vt knlist 26674a603ebSRuslan Ermilovstructure may be embedded into the object structure. 26790db62acSJohn-Mark GurneyThe 26890db62acSJohn-Mark Gurney.Fa lock 2694ce04b3dSJohn-Mark Gurneywill be held over 2704ce04b3dSJohn-Mark Gurney.Va f_event 2714ce04b3dSJohn-Mark Gurneycalls. 2724ce04b3dSJohn-Mark Gurney.Pp 2734ce04b3dSJohn-Mark GurneyFor the 2744ce04b3dSJohn-Mark Gurney.Fn knlist_init 2754ce04b3dSJohn-Mark Gurneyfunction, if 2764ce04b3dSJohn-Mark Gurney.Fa lock 2774ce04b3dSJohn-Mark Gurneyis 2784ce04b3dSJohn-Mark Gurney.Dv NULL , 2794ce04b3dSJohn-Mark Gurneya shared global lock will be used and the remaining arguments must be 2804ce04b3dSJohn-Mark Gurney.Dv NULL . 2814ce04b3dSJohn-Mark GurneyThe function pointers 2824ce04b3dSJohn-Mark Gurney.Fa kl_lock , kl_unlock 2834ce04b3dSJohn-Mark Gurneyand 2844ce04b3dSJohn-Mark Gurney.Fa kl_locked 2854ce04b3dSJohn-Mark Gurneywill be used to manipulate the argument 2864ce04b3dSJohn-Mark Gurney.Fa lock . 2874ce04b3dSJohn-Mark GurneyIf any of the function pointers are 2884ce04b3dSJohn-Mark Gurney.Dv NULL , 2894ce04b3dSJohn-Mark Gurneya function operating on 2904ce04b3dSJohn-Mark Gurney.Dv MTX_DEF 2914ce04b3dSJohn-Mark Gurneystyle 2924ce04b3dSJohn-Mark Gurney.Xr mutex 9 2934ce04b3dSJohn-Mark Gurneylocks will be used instead. 2944ce04b3dSJohn-Mark Gurney.Pp 2954ce04b3dSJohn-Mark GurneyThe function 2964ce04b3dSJohn-Mark Gurney.Fn knlist_init_mtx 2973102cfe2SGlen Barbermay be used to initialize a 2984ce04b3dSJohn-Mark Gurney.Vt knlist 2994ce04b3dSJohn-Mark Gurneywhen 3004ce04b3dSJohn-Mark Gurney.Fa lock 3014ce04b3dSJohn-Mark Gurneyis a 3024ce04b3dSJohn-Mark Gurney.Dv MTX_DEF 3034ce04b3dSJohn-Mark Gurneystyle 3044ce04b3dSJohn-Mark Gurney.Xr mutex 9 3054ce04b3dSJohn-Mark Gurneylock. 3064ce04b3dSJohn-Mark Gurney.Pp 30790db62acSJohn-Mark GurneyThe function 30890db62acSJohn-Mark Gurney.Fn knlist_empty 3094ce04b3dSJohn-Mark Gurneyreturns true when there are no 3104ce04b3dSJohn-Mark Gurney.Vt knotes 3114ce04b3dSJohn-Mark Gurneyon the list. 3124ce04b3dSJohn-Mark GurneyThe function requires that the 31390db62acSJohn-Mark Gurney.Fa lock 3144ce04b3dSJohn-Mark Gurneybe held when called. 3154ce04b3dSJohn-Mark Gurney.Pp 31690db62acSJohn-Mark GurneyThe function 31790db62acSJohn-Mark Gurney.Fn knlist_clear 3184ce04b3dSJohn-Mark Gurneyremoves all 31974a603ebSRuslan Ermilov.Vt knotes 3204ce04b3dSJohn-Mark Gurneyfrom the list. 32190db62acSJohn-Mark GurneyThe 32290db62acSJohn-Mark Gurney.Fa islocked 3234ce04b3dSJohn-Mark Gurneyargument declares if the 32490db62acSJohn-Mark Gurney.Fa lock 32574a603ebSRuslan Ermilovhas been acquired. 32690db62acSJohn-Mark GurneyAll 32790db62acSJohn-Mark Gurney.Vt knotes 3284ce04b3dSJohn-Mark Gurneywill have 32990db62acSJohn-Mark Gurney.Dv EV_ONESHOT 3304ce04b3dSJohn-Mark Gurneyset so that the 33190db62acSJohn-Mark Gurney.Vt knote 332646fa387SEdward Tomasz Napieralawill be returned and removed during the next scan. 3334ce04b3dSJohn-Mark GurneyThe 3344ce04b3dSJohn-Mark Gurney.Va f_detach 3354ce04b3dSJohn-Mark Gurneyfunction will be called when the 3364ce04b3dSJohn-Mark Gurney.Vt knote 337646fa387SEdward Tomasz Napieralais deleted during the next scan. 3384ce04b3dSJohn-Mark GurneyThis function must not be used when 3394ce04b3dSJohn-Mark Gurney.Va f_isfd 3404ce04b3dSJohn-Mark Gurneyis set in 3414ce04b3dSJohn-Mark Gurney.Vt "struct filterops" , 3424ce04b3dSJohn-Mark Gurneyas the 3434ce04b3dSJohn-Mark Gurney.Fa td 3444ce04b3dSJohn-Mark Gurneyargument of 3454ce04b3dSJohn-Mark Gurney.Fn fdrop 3464ce04b3dSJohn-Mark Gurneywill be 3474ce04b3dSJohn-Mark Gurney.Dv NULL . 3484ce04b3dSJohn-Mark Gurney.Pp 3494ce04b3dSJohn-Mark GurneyThe function 3504ce04b3dSJohn-Mark Gurney.Fn knlist_delete 3514ce04b3dSJohn-Mark Gurneyremoves and deletes all 3524ce04b3dSJohn-Mark Gurney.Vt knotes 3534ce04b3dSJohn-Mark Gurneyon the list. 3544ce04b3dSJohn-Mark GurneyThe function 3554ce04b3dSJohn-Mark Gurney.Va f_detach 3564ce04b3dSJohn-Mark Gurneywill not be called, and the 3574ce04b3dSJohn-Mark Gurney.Vt knote 3584ce04b3dSJohn-Mark Gurneywill not be returned on the next scan. 3594ce04b3dSJohn-Mark GurneyUsing this function could leak userland resources if a process uses the 3604ce04b3dSJohn-Mark Gurney.Vt knote 3614ce04b3dSJohn-Mark Gurneyto track resources. 3624ce04b3dSJohn-Mark Gurney.Pp 3634ce04b3dSJohn-Mark GurneyBoth the 3644ce04b3dSJohn-Mark Gurney.Fn knlist_clear 3654ce04b3dSJohn-Mark Gurneyand 3664ce04b3dSJohn-Mark Gurney.Fn knlist_delete 3674ce04b3dSJohn-Mark Gurneyfunctions may sleep. 3684ce04b3dSJohn-Mark GurneyThey also may release the 3694ce04b3dSJohn-Mark Gurney.Fa lock 3704ce04b3dSJohn-Mark Gurneyto wait for other 3714ce04b3dSJohn-Mark Gurney.Vt knotes 3724ce04b3dSJohn-Mark Gurneyto drain. 3734ce04b3dSJohn-Mark Gurney.Pp 37474a603ebSRuslan ErmilovThe 37590db62acSJohn-Mark Gurney.Fn knlist_destroy 37674a603ebSRuslan Ermilovfunction is used to destroy a 37774a603ebSRuslan Ermilov.Vt knlist . 37890db62acSJohn-Mark GurneyThere must be no 37990db62acSJohn-Mark Gurney.Vt knotes 38090db62acSJohn-Mark Gurneyassociated with the 38190db62acSJohn-Mark Gurney.Vt knlist 3821e9469d1SChristian Brueffer.Po Fn knlist_empty 3831e9469d1SChristian Bruefferreturns true 3841e9469d1SChristian Brueffer.Pc 38574a603ebSRuslan Ermilovand no more 38690db62acSJohn-Mark Gurney.Vt knotes 38774a603ebSRuslan Ermilovmay be attached to the object. 38874a603ebSRuslan ErmilovA 38974a603ebSRuslan Ermilov.Vt knlist 39074a603ebSRuslan Ermilovmay be emptied by calling 3914ce04b3dSJohn-Mark Gurney.Fn knlist_clear 3924ce04b3dSJohn-Mark Gurneyor 3934ce04b3dSJohn-Mark Gurney.Fn knlist_delete . 39490db62acSJohn-Mark Gurney.Pp 39574a603ebSRuslan ErmilovThe macros 39690db62acSJohn-Mark Gurney.Fn KNOTE_LOCKED 39790db62acSJohn-Mark Gurneyand 39890db62acSJohn-Mark Gurney.Fn KNOTE_UNLOCKED 39974a603ebSRuslan Ermilovare used to notify 40074a603ebSRuslan Ermilov.Vt knotes 40174a603ebSRuslan Ermilovabout events associated with the object. 40274a603ebSRuslan ErmilovIt will iterate over all 40390db62acSJohn-Mark Gurney.Vt knotes 40490db62acSJohn-Mark Gurneyon the list calling the 40590db62acSJohn-Mark Gurney.Va f_event 40690db62acSJohn-Mark Gurneyfunction associated with the 40790db62acSJohn-Mark Gurney.Vt knote . 40874a603ebSRuslan ErmilovThe macro 40990db62acSJohn-Mark Gurney.Fn KNOTE_LOCKED 41090db62acSJohn-Mark Gurneymust be used if the lock associated with the 41190db62acSJohn-Mark Gurney.Fa knl 4124ce04b3dSJohn-Mark Gurneyis held. 41390db62acSJohn-Mark GurneyThe function 41490db62acSJohn-Mark Gurney.Fn KNOTE_UNLOCKED 41574a603ebSRuslan Ermilovwill acquire the lock before iterating over the list of 41674a603ebSRuslan Ermilov.Vt knotes . 41790db62acSJohn-Mark Gurney.Sh RETURN VALUES 41890db62acSJohn-Mark GurneyThe function 41990db62acSJohn-Mark Gurney.Fn kqueue_add_filteropts 42090db62acSJohn-Mark Gurneywill return zero on success, 42190db62acSJohn-Mark Gurney.Er EINVAL 42290db62acSJohn-Mark Gurneyin the case of an invalid 42374a603ebSRuslan Ermilov.Fa filt , 42490db62acSJohn-Mark Gurneyor 42590db62acSJohn-Mark Gurney.Er EEXIST 42690db62acSJohn-Mark Gurneyif the filter has already been installed. 42790db62acSJohn-Mark Gurney.Pp 42890db62acSJohn-Mark GurneyThe function 42990db62acSJohn-Mark Gurney.Fn kqueue_del_filteropts 43090db62acSJohn-Mark Gurneywill return zero on success, 43190db62acSJohn-Mark Gurney.Er EINVAL 43290db62acSJohn-Mark Gurneyin the case of an invalid 43374a603ebSRuslan Ermilov.Fa filt , 43490db62acSJohn-Mark Gurneyor 43590db62acSJohn-Mark Gurney.Er EBUSY 43690db62acSJohn-Mark Gurneyif the filter is still in use. 43790db62acSJohn-Mark Gurney.Pp 43890db62acSJohn-Mark GurneyThe function 43990db62acSJohn-Mark Gurney.Fn kqfd_register 44090db62acSJohn-Mark Gurneywill return zero on success, 44190db62acSJohn-Mark Gurney.Er EBADF 44274a603ebSRuslan Ermilovif the file descriptor is not a kqueue, or any of the possible values returned 44390db62acSJohn-Mark Gurneyby 44474a603ebSRuslan Ermilov.Xr kevent 2 . 44590db62acSJohn-Mark Gurney.Sh SEE ALSO 44674a603ebSRuslan Ermilov.Xr kevent 2 , 44774a603ebSRuslan Ermilov.Xr kqueue 2 44890db62acSJohn-Mark Gurney.Sh AUTHORS 44990db62acSJohn-Mark GurneyThis 45090db62acSJohn-Mark Gurneymanual page was written by 4518a7314fcSBaptiste Daroussin.An John-Mark Gurney Aq Mt jmg@FreeBSD.org . 452