Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/kern_event.c
Show First 20 Lines • Show All 2,708 Lines • ▼ Show 20 Lines | |||||
int | int | ||||
kqfd_register(int fd, struct kevent *kev, struct thread *td, int mflag) | kqfd_register(int fd, struct kevent *kev, struct thread *td, int mflag) | ||||
{ | { | ||||
struct kqueue *kq; | struct kqueue *kq; | ||||
struct file *fp; | struct file *fp; | ||||
cap_rights_t rights; | cap_rights_t rights; | ||||
int error; | int error; | ||||
error = fget(td, fd, cap_rights_init(&rights, CAP_KQUEUE_CHANGE), &fp); | error = fget(td, fd, cap_rights_init_one(&rights, CAP_KQUEUE_CHANGE), | ||||
&fp); | |||||
if (error != 0) | if (error != 0) | ||||
return (error); | return (error); | ||||
if ((error = kqueue_acquire(fp, &kq)) != 0) | if ((error = kqueue_acquire(fp, &kq)) != 0) | ||||
goto noacquire; | goto noacquire; | ||||
error = kqueue_register(kq, kev, td, mflag); | error = kqueue_register(kq, kev, td, mflag); | ||||
kqueue_release(kq, 0); | kqueue_release(kq, 0); | ||||
noacquire: | noacquire: | ||||
fdrop(fp, td); | fdrop(fp, td); | ||||
return (error); | return (error); | ||||
} | } |