diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -1057,6 +1057,19 @@ return (kern_kqueue(td, 0, NULL)); } +int +sys_kqueue1(struct thread *td, struct kqueue1_args *uap) +{ + int flags; + + if ((uap->flags & ~(KQUEUE_CLOEXEC)) != 0) + return (EINVAL); + flags = 0; + if ((uap->flags & KQUEUE_CLOEXEC) != 0) + flags |= O_CLOEXEC; + return (kern_kqueue(td, flags, NULL)); +} + static void kqueue_init(struct kqueue *kq) { diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master --- a/sys/kern/syscalls.master +++ b/sys/kern/syscalls.master @@ -3306,5 +3306,10 @@ u_int flags, ); } +583 AUE_KQUEUE STD|CAPENABLED { + int kqueue1( + u_int flags + ); + } ; vim: syntax=off diff --git a/sys/sys/event.h b/sys/sys/event.h --- a/sys/sys/event.h +++ b/sys/sys/event.h @@ -218,6 +218,9 @@ #define NOTE_NSECONDS 0x00000008 /* data is nanoseconds */ #define NOTE_ABSTIME 0x00000010 /* timeout is absolute */ +/* Flags for kqueue1(2) */ +#define KQUEUE_CLOEXEC 0x00000001 /* close on exec */ + struct knote; SLIST_HEAD(klist, knote); struct kqueue;