diff options
author | Nick Mathewson <nickm@torproject.org> | 2008-05-30 16:56:34 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2008-05-30 16:56:34 +0000 |
commit | 39400e68b6202dc40545b5ac26468fc3f7a11184 (patch) | |
tree | 6b018eb67519d1a7284c5c4103728354b8953ef6 /kqueue.c | |
parent | 9ca7a3a3d6be5741095b3ba2c7e1c979f66628cb (diff) | |
download | libevent-39400e68b6202dc40545b5ac26468fc3f7a11184.tar.gz |
Patch from Valery Kholodkov: support for edge-triggered events with epoll and kqueue. Changed from original patch: made test into a regression test, with explicit success/failure for edge-triggered and non-edge-triggered cases. Closes SF request 1968284.
svn:r840
Diffstat (limited to 'kqueue.c')
-rw-r--r-- | kqueue.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -272,7 +272,7 @@ kq_dispatch(struct event_base *base, void *arg, struct timeval *tv) if (!(ev->ev_events & EV_PERSIST)) ev->ev_flags &= ~EVLIST_X_KQINKERNEL; - event_active(ev, which, + event_active(ev, which | (ev->ev_events & EV_ET), ev->ev_events & EV_SIGNAL ? events[i].data : 1); } @@ -322,6 +322,8 @@ kq_add(void *arg, struct event *ev) kev.flags = EV_ADD; if (!(ev->ev_events & EV_PERSIST)) kev.flags |= EV_ONESHOT; + if (ev->ev_events & EV_ET) + kev.flags |= EV_CLEAR; kev.udata = PTR_TO_UDATA(ev); if (kq_insert(kqop, &kev) == -1) @@ -337,6 +339,8 @@ kq_add(void *arg, struct event *ev) kev.flags = EV_ADD; if (!(ev->ev_events & EV_PERSIST)) kev.flags |= EV_ONESHOT; + if (ev->ev_events & EV_ET) + kev.flags |= EV_CLEAR; kev.udata = PTR_TO_UDATA(ev); if (kq_insert(kqop, &kev) == -1) |