Browse Source

*** empty log message ***

master
Marc Alexander Lehmann 13 years ago
parent
commit
09a5a4b7c5
  1. 4
      Changes
  2. 32
      ev.3
  3. 11
      ev.pod
  4. 8
      ev_select.c

4
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.

32
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'

11
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

8
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;

Loading…
Cancel
Save