Project

General

Profile

Submit #2860 ยป 0001-Bring-in-EV_RECEIPT-revision-197243-and-EV_DISPATCH-.patch

tautolog, 12/04/2015 12:06 AM

View differences:

lib/libc/sys/kqueue.2
.Fn kevent
will not return it.
The filter itself is not disabled.
.It EV_DISPATCH
Disable the event source immediately after delivery of an event.
See
.Dv EV_DISABLE
above.
.It Dv EV_DELETE
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 Dv EV_ONESHOT
Causes the event to return only the first occurrence of the filter
being triggered.
sys/kern/kern_event.c
* to post the error (see sys_poll()), then we
* ignore it too.
*/
if (error) {
if (error || (kevp->flags & EV_RECEIPT)) {
kevp->flags = EV_ERROR;
kevp->data = error;
lres = *res;
......
kn->kn_status &= ~KN_QUEUED;
kn->kn_status |= KN_DELETING | KN_REPROCESS;
} else {
if (kn->kn_flags & EV_CLEAR) {
kn->kn_data = 0;
kn->kn_fflags = 0;
if (kn->kn_flags & (EV_CLEAR | EV_DISPATCH)) {
if (kn->kn_flags & EV_CLEAR) {
kn->kn_data = 0;
kn->kn_fflags = 0;
}
if (kn->kn_flags & EV_DISPATCH) {
kn->kn_status |= KN_DISABLED;
}
kn->kn_status &= ~(KN_QUEUED |
KN_ACTIVE);
} else {
sys/sys/event.h
/* flags */
#define EV_ONESHOT 0x0010 /* only report one occurrence */
#define EV_CLEAR 0x0020 /* clear event state after reporting */
#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 */
#define EV_FLAG1 0x2000 /* filter-specific flag */
    (1-1/1)