Page MenuHomeFreeBSD

D3364.id7892.diff
No OneTemporary

D3364.id7892.diff

Index: sys/kern/kern_event.c
===================================================================
--- sys/kern/kern_event.c
+++ sys/kern/kern_event.c
@@ -975,6 +975,10 @@
return (error);
}
+/*
+ * Performs a kevent() call on a temporarily created kqueue. This can be
+ * used to perform one-shot polling, similar to poll() and select().
+ */
int
kern_kevent_anonymous(struct thread *td, int nevents,
struct kevent_copyops *k_ops)
@@ -1831,6 +1835,8 @@
kqueue_destroy(struct kqueue *kq)
{
+ KASSERT(kq->kq_fdp == NULL,
+ ("kqueue still attached to a file descriptor"));
seldrain(&kq->kq_sel);
knlist_destroy(&kq->kq_sel.si_note);
mtx_destroy(&kq->kq_lock);
@@ -1863,6 +1869,7 @@
* take the sleepable lock after non-sleepable.
*/
fdp = kq->kq_fdp;
+ kq->kq_fdp = NULL;
if (!sx_xlocked(FILEDESC_LOCK(fdp))) {
FILEDESC_XLOCK(fdp);
filedesc_unlock = 1;

File Metadata

Mime Type
text/plain
Expires
Mon, Feb 9, 2:26 PM (16 h, 56 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28588975
Default Alt Text
D3364.id7892.diff (889 B)

Event Timeline