diff options
author | sson <sson@FreeBSD.org> | 2009-09-16 03:49:54 +0000 |
---|---|---|
committer | sson <sson@FreeBSD.org> | 2009-09-16 03:49:54 +0000 |
commit | 95d4e7d0750d9cb513c20c55282fbfb46b2c4a8a (patch) | |
tree | 4e459ad91b2bf9cbe26b4d39196166754fd16bf7 /sys | |
parent | a386443e5123201c31ec7a193e83f022ede7f469 (diff) | |
download | FreeBSD-src-95d4e7d0750d9cb513c20c55282fbfb46b2c4a8a.zip FreeBSD-src-95d4e7d0750d9cb513c20c55282fbfb46b2c4a8a.tar.gz |
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)
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/kern_event.c | 2 | ||||
-rw-r--r-- | sys/sys/event.h | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index 2630894..8ce7621 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -832,7 +832,7 @@ kern_kevent(struct thread *td, int fd, int nchanges, int nevents, 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; diff --git a/sys/sys/event.h b/sys/sys/event.h index 2934b7b..ec76f35 100644 --- a/sys/sys/event.h +++ b/sys/sys/event.h @@ -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 */ |