summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes2
-rw-r--r--ev_epoll.c2
2 files changed, 3 insertions, 1 deletions
diff --git a/Changes b/Changes
index 4dda738..8375f27 100644
--- a/Changes
+++ b/Changes
@@ -9,6 +9,8 @@ TODO: EV_USE__XXX default with config, document
testcase by Vladimir Timofeev).
- applied win32 fixes by Michael Lenaghan (also James Mansion).
- replace EV_MINIMAL by EV_FEATURES.
+ - prefer EPOLL_CTL_ADD over EPOLL_CTL_MOD in some more cases, as it
+ seems the former is *much* faster than the latter.
- remove dependency on sys/queue.h on freebsd (patch by Vanilla Hsu).
- add (undocumented) EV_ENABLE when adding events with kqueue,
this might help with OS X, which seems to need it despite documenting
diff --git a/ev_epoll.c b/ev_epoll.c
index a324691..c738fd0 100644
--- a/ev_epoll.c
+++ b/ev_epoll.c
@@ -90,7 +90,7 @@ epoll_modify (EV_P_ int fd, int oev, int nev)
ev.events = (nev & EV_READ ? EPOLLIN : 0)
| (nev & EV_WRITE ? EPOLLOUT : 0);
- if (expect_true (!epoll_ctl (backend_fd, oev ? EPOLL_CTL_MOD : EPOLL_CTL_ADD, fd, &ev)))
+ if (expect_true (!epoll_ctl (backend_fd, oev && oldmask != nev ? EPOLL_CTL_MOD : EPOLL_CTL_ADD, fd, &ev)))
return;
if (expect_true (errno == ENOENT))