summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes4
-rw-r--r--ev.332
-rw-r--r--ev.pod11
-rw-r--r--ev_select.c8
4 files changed, 48 insertions, 7 deletions
diff --git a/Changes b/Changes
index e4062d6..9f282dd 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,9 @@
Revision history for libev, a high-performance and full-featured event loop.
+3.2
+ - fix a 64 bit overflow issue in the select backend,
+ by using fd_mask instead of int for the mask.
+
3.1 Thu Mar 13 13:45:22 CET 2008
- implement ev_async watchers.
- only initialise signal pipe on demand.
diff --git a/ev.3 b/ev.3
index 3228d8f..9bef0a5 100644
--- a/ev.3
+++ b/ev.3
@@ -132,7 +132,7 @@
.\" ========================================================================
.\"
.IX Title "EV 1"
-.TH EV 1 "2008-03-08" "perl v5.10.0" "User Contributed Perl Documentation"
+.TH EV 1 "2008-03-13" "perl v5.10.0" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -2618,6 +2618,32 @@ the constructor.
\& }
\& };
.Ve
+.SH "OTHER LANGUAGE BINDINGS"
+.IX Header "OTHER LANGUAGE BINDINGS"
+Libev does not offer other language bindings itself, but bindings for a
+numbe rof languages exist in the form of third-party packages. If you know
+any interesting language binding in addition to the ones listed here, drop
+me a note.
+.IP "Perl" 4
+.IX Item "Perl"
+The \s-1EV\s0 module implements the full libev \s-1API\s0 and is actually used to test
+libev. \s-1EV\s0 is developed together with libev. Apart from the \s-1EV\s0 core module,
+there are additional modules that implement libev-compatible interfaces
+to \f(CW\*(C`libadns\*(C'\fR (\f(CW\*(C`EV::ADNS\*(C'\fR), \f(CW\*(C`Net::SNMP\*(C'\fR (\f(CW\*(C`Net::SNMP::EV\*(C'\fR) and the
+\&\f(CW\*(C`libglib\*(C'\fR event core (\f(CW\*(C`Glib::EV\*(C'\fR and \f(CW\*(C`EV::Glib\*(C'\fR).
+.Sp
+It can be found and installed via \s-1CPAN\s0, its homepage is found at
+<http://software.schmorp.de/pkg/EV>.
+.IP "Ruby" 4
+.IX Item "Ruby"
+Tony Arcieri has written a ruby extension that offers access to a subset
+of the libev \s-1API\s0 and adds filehandle abstractions, asynchronous \s-1DNS\s0 and
+more on top of it. It can be found via gem servers. Its homepage is at
+<http://rev.rubyforge.org/>.
+.IP "D" 4
+.IX Item "D"
+Leandro Lucarella has written a D language binding (\fIev.d\fR) for libev, to
+be found at <http://git.llucax.com.ar/?p=software/ev.d.git;a=summary>.
.SH "MACRO MAGIC"
.IX Header "MACRO MAGIC"
Libev can be compiled with a variety of options, the most fundamantal
@@ -3199,6 +3225,6 @@ Marc Lehmann <libev@schmorp.de>.
.SH "POD ERRORS"
.IX Header "POD ERRORS"
Hey! \fBThe above document had some coding errors, which are explained below:\fR
-.IP "Around line 2916:" 4
-.IX Item "Around line 2916:"
+.IP "Around line 2951:" 4
+.IX Item "Around line 2951:"
You forgot a '=back' before '=head2'
diff --git a/ev.pod b/ev.pod
index c7ac21a..752c52a 100644
--- a/ev.pod
+++ b/ev.pod
@@ -1602,6 +1602,17 @@ to fall back to regular polling again even with inotify, but changes are
usually detected immediately, and if the file exists there will be no
polling.
+=head3 ABI Issues (Largefile Support)
+
+Libev by default (unless the user overrides this) uses the default
+compilation environment, which means that on systems with optionally
+disabled large file support, you get the 32 bit version of the stat
+structure. When using the library from programs that change the ABI to
+use 64 bit file offsets the programs will fail. In that case you have to
+compile libev with the same flags to get binary compatibility. This is
+obviously the case with any flags that change the ABI, but the problem is
+most noticably with ev_stat and largefile support.
+
=head3 Inotify
When C<inotify (7)> support has been compiled into libev (generally only
diff --git a/ev_select.c b/ev_select.c
index b52a88d..3b06654 100644
--- a/ev_select.c
+++ b/ev_select.c
@@ -95,8 +95,8 @@ select_modify (EV_P_ int fd, int oev, int nev)
#else
- int word = fd / NFDBITS;
- int mask = 1UL << (fd % NFDBITS);
+ int word = fd / NFDBITS;
+ fd_mask mask = 1UL << (fd % NFDBITS);
if (expect_false (vec_max < word + 1))
{
@@ -108,8 +108,8 @@ select_modify (EV_P_ int fd, int oev, int nev)
vec_wo = ev_realloc (vec_wo, new_max * NFDBYTES); /* could free/malloc */
for (; vec_max < new_max; ++vec_max)
- ((fd_mask *)vec_ri)[vec_max] =
- ((fd_mask *)vec_wi)[vec_max] = 0;
+ ((fd_mask *)vec_ri) [vec_max] =
+ ((fd_mask *)vec_wi) [vec_max] = 0;
}
((fd_mask *)vec_ri) [word] |= mask;