svn commit: r197243 - in head: lib/libc/sys sys/kern sys/sys
Stacey Son
sson at FreeBSD.org
Wed Sep 16 03:49:54 UTC 2009
Author: sson
Date: Wed Sep 16 03:49:54 2009
New Revision: 197243
URL: http://svn.freebsd.org/changeset/base/197243
Log:
Add EV_RECEIPT to kevents.
EV_RECEIPT is useful to disambiguating error conditions when multiple
events structures are passed to kevent(2). The error code is returned
in the data field and EV_ERROR is set.
Approved by: rwatson (co-mentor)
Modified:
head/lib/libc/sys/kqueue.2
head/sys/kern/kern_event.c
head/sys/sys/event.h
Modified: head/lib/libc/sys/kqueue.2
==============================================================================
--- head/lib/libc/sys/kqueue.2 Wed Sep 16 03:37:39 2009 (r197242)
+++ head/lib/libc/sys/kqueue.2 Wed Sep 16 03:49:54 2009 (r197243)
@@ -211,6 +211,15 @@ Removes the event from the kqueue.
Events which are attached to
file descriptors are automatically deleted on the last close of
the descriptor.
+.It EV_RECEIPT
+This flag is useful for making bulk changes to a kqueue without draining
+any pending events.
+When passed as input, it forces
+.Dv EV_ERROR
+to always be returned.
+When a filter is successfully added the
+.Va data
+field will be zero.
.It EV_ONESHOT
Causes the event to return only the first occurrence of the filter
being triggered.
Modified: head/sys/kern/kern_event.c
==============================================================================
--- head/sys/kern/kern_event.c Wed Sep 16 03:37:39 2009 (r197242)
+++ head/sys/kern/kern_event.c Wed Sep 16 03:49:54 2009 (r197243)
@@ -832,7 +832,7 @@ kern_kevent(struct thread *td, int fd, i
continue;
kevp->flags &= ~EV_SYSFLAGS;
error = kqueue_register(kq, kevp, td, 1);
- if (error) {
+ if (error || (kevp->flags & EV_RECEIPT)) {
if (nevents != 0) {
kevp->flags = EV_ERROR;
kevp->data = error;
Modified: head/sys/sys/event.h
==============================================================================
--- head/sys/sys/event.h Wed Sep 16 03:37:39 2009 (r197242)
+++ head/sys/sys/event.h Wed Sep 16 03:49:54 2009 (r197243)
@@ -72,7 +72,7 @@ struct kevent {
/* flags */
#define EV_ONESHOT 0x0010 /* only report one occurrence */
#define EV_CLEAR 0x0020 /* clear event state after reporting */
- /* 0x0040 reserved for EV_RECEIPT */
+#define EV_RECEIPT 0x0040 /* force EV_ERROR on success, data=0 */
#define EV_DISPATCH 0x0080 /* disable event after reporting */
#define EV_SYSFLAGS 0xF000 /* reserved by system */
More information about the svn-src-head
mailing list