summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root>2009-11-24 06:37:23 +0000
committerroot <root>2009-11-24 06:37:23 +0000
commit079ffff0acc5dad3ef0389e25df1e59ce12f6cb5 (patch)
tree52339e9cc7463230bc90cf02762936842ae4dd20
parentb9a29c2dac5c8a652cedcf232a780ba9da8df57e (diff)
*** empty log message ***
-rw-r--r--ev.pod3
-rw-r--r--ev_epoll.c2
2 files changed, 5 insertions, 0 deletions
diff --git a/ev.pod b/ev.pod
index 4e34827..fa6d7b0 100644
--- a/ev.pod
+++ b/ev.pod
@@ -413,6 +413,9 @@ C<EV_WRITE> to C<POLLOUT | POLLERR | POLLHUP>.
=item C<EVBACKEND_EPOLL> (value 4, Linux)
+Use the linux-specific epoll(7) interface (for both pre- and post-2.6.9
+kernels).
+
For few fds, this backend is a bit little slower than poll and select,
but it scales phenomenally better. While poll and select usually scale
like O(total_fds) where n is the total number of fds (or the highest fd),
diff --git a/ev_epoll.c b/ev_epoll.c
index 04acd98..f7e3d60 100644
--- a/ev_epoll.c
+++ b/ev_epoll.c
@@ -161,6 +161,8 @@ epoll_poll (EV_P_ ev_tstamp timeout)
ev->events = (want & EV_READ ? EPOLLIN : 0)
| (want & EV_WRITE ? EPOLLOUT : 0);
+ /* pre-2.6.9 kernels require a non-null pointer with EPOLL_CTL_DEL, */
+ /* which is fortunately easy to do for us. */
if (epoll_ctl (backend_fd, want ? EPOLL_CTL_MOD : EPOLL_CTL_DEL, fd, ev))
{
postfork = 1; /* an error occured, recreate kernel state */