]> granicus.if.org Git - libevent/commitdiff
Avoid triggering wrong events with EV_ET set
authorAzat Khuzhin <azat@libevent.org>
Wed, 8 Apr 2020 23:16:15 +0000 (02:16 +0300)
committerAzat Khuzhin <azat@libevent.org>
Mon, 4 May 2020 20:58:28 +0000 (23:58 +0300)
For the event at least something except EV_ET should be set, so checking
ev->ev_events with "triggered" events is wrong, because EV_ET is always
passed (see epoll), since it will be filtered out if it is not set in
event.

evmap.c

diff --git a/evmap.c b/evmap.c
index ffc991f5ccd60c33fdee9cc73b6dfc2285092dae..e4e35c6877f8b992ec6b377d15abab45abc13af1 100644 (file)
--- a/evmap.c
+++ b/evmap.c
@@ -432,7 +432,7 @@ evmap_io_active_(struct event_base *base, evutil_socket_t fd, short events)
        if (NULL == ctx)
                return;
        LIST_FOREACH(ev, &ctx->events, ev_io_next) {
-               if (ev->ev_events & events)
+               if (ev->ev_events & (events & ~EV_ET))
                        event_active_nolock_(ev, ev->ev_events & events, 1);
        }
 }