From e9e46a13c50948d7ae41b2dc3c888fe323e7067b Mon Sep 17 00:00:00 2001 From: root Date: Sun, 16 Mar 2008 16:38:23 +0000 Subject: *** empty log message *** --- Changes | 4 ++++ ev.3 | 32 +++++++++++++++++++++++++++++--- ev.pod | 11 +++++++++++ ev_select.c | 8 ++++---- 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 +. +.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 +. +.IP "D" 4 +.IX Item "D" +Leandro Lucarella has written a D language binding (\fIev.d\fR) for libev, to +be found at . .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 . .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 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; -- cgit v1.2.3