diff options
author | visa <visa@openbsd.org> | 2020-05-17 10:53:14 +0000 |
---|---|---|
committer | visa <visa@openbsd.org> | 2020-05-17 10:53:14 +0000 |
commit | 0f17ffe10d09ab24e4fa18c6613534f381001241 (patch) | |
tree | e1936ff56e72d381906b0bd0cd72d7b32bcc0b3c /sys/sys/event.h | |
parent | Do not redefine todr_handle. The variable now lives in kern_time.c. (diff) | |
download | wireguard-openbsd-0f17ffe10d09ab24e4fa18c6613534f381001241.tar.xz wireguard-openbsd-0f17ffe10d09ab24e4fa18c6613534f381001241.zip |
Add kqueue_scan_state struct
The struct keeps track of the end point of an event queue scan by
persisting the end marker. This will be needed when kqueue_scan() is
called repeatedly to complete a scan in a piecewise fashion. The end
marker has to be preserved between calls because otherwise the scan
might collect an event more than once. If a collected event gets
reactivated during scanning, it will be added at the tail of the queue,
out of reach because of the end marker.
OK mpi@
Diffstat (limited to 'sys/sys/event.h')
-rw-r--r-- | sys/sys/event.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/sys/sys/event.h b/sys/sys/event.h index 3f42b89aaa7..51487835ced 100644 --- a/sys/sys/event.h +++ b/sys/sys/event.h @@ -1,4 +1,4 @@ -/* $OpenBSD: event.h,v 1.36 2020/05/10 00:56:06 guenther Exp $ */ +/* $OpenBSD: event.h,v 1.37 2020/05/17 10:53:14 visa Exp $ */ /*- * Copyright (c) 1999,2000,2001 Jonathan Lemon <jlemon@FreeBSD.org> @@ -189,6 +189,15 @@ struct knote { #define kn_fp kn_ptr.p_fp }; +struct kqueue_scan_state { + struct kqueue *kqs_kq; /* kqueue of this scan */ + struct knote kqs_start; /* start marker */ + struct knote kqs_end; /* end marker */ + int kqs_nevent; /* number of events collected */ + int kqs_queued; /* if set, end marker is + * in queue */ +}; + struct proc; extern const struct filterops sig_filtops; @@ -200,6 +209,8 @@ extern void knote_fdclose(struct proc *p, int fd); extern void knote_processexit(struct proc *); extern int kqueue_register(struct kqueue *kq, struct kevent *kev, struct proc *p); +extern void kqueue_scan_setup(struct kqueue_scan_state *, struct kqueue *); +extern void kqueue_scan_finish(struct kqueue_scan_state *); extern int filt_seltrue(struct knote *kn, long hint); extern int seltrue_kqfilter(dev_t, struct knote *); extern void klist_insert(struct klist *, struct knote *); |