AnyEvent
view release on metacpan or search on metacpan
$1 being dynamically scoped per-block. this perl bug is now being
worked around (testcase by Cindy Wang).
6.12 Mon Dec 12 13:21:10 CET 2011
- $! was clobbered by subsequent calls in tcp_connect, due to
the postpone not saving/restoring it (analyzed by Richard Garnish).
6.11 Tue Nov 22 10:36:05 CET 2011
- Tk cannot create windows when tainted unless you set a title, so
set a dummy title for AnyEvent's dummy mainwindow. How dummy.
- escape any nonprintable/nonascii characters when stringifying
backtraces.
- log the reason loading an interface module fails to load at level debug.
6.1 Tue Oct 4 19:44:30 CEST 2011
- INCOMPATIBLE CHANGE: the default log level is now "4" (error
and above), and some messages inside AnyEvent have been elevated
to higher log levels to print by default.
- AnyEvent::log, unlike AnyEvent::Log::log, did not always exit on fatal.
- work around yet another signal race bug, newly introduced by POE. My
how that module sucks.
lib/AnyEvent/Impl/POE.pm view on Meta::CPAN
relative timers exclusively, in the hope that POE gets it right at least
internally.
=item Lack of defined event ordering
POE cannot guarantee the order of callback invocation for timers, and
usually gets it wrong. That is, if you have two timers, one timing out
after another (all else being equal), the callbacks might be called in
reverse order.
How one manages to even implement stuff that way escapes me.
=item Child watchers
POE offers child watchers - which is a laudable thing, as few event loops
do. Unfortunately, they cannot even implement AnyEvent's simple child
watchers: they are not generic enough (the POE implementation isn't even
generic enough to let properly designed back-end use their native child
watcher instead - it insist on doing it itself the broken way).
Unfortunately, POE's child handling is inherently racy: if the child exits
lib/AnyEvent/Impl/POE.pm view on Meta::CPAN
Of course, whenever POE reaps an unrelated child it will also output a
message for it that you cannot suppress (which shouldn't be too surprising
at this point). Very professional.
As a workaround, AnyEvent::Impl::POE will take advantage of undocumented
behaviour in POE::Kernel to catch the status of all child processes, but
it cannot guarantee delivery.
How one manages to have such a glaring bug in an event loop after ten
years of development escapes me.
(There are more annoying bugs, for example, POE runs C<waitpid>
unconditionally at finaliser time, so your program will hang until all
child processes have exited.)
=item Documentation quality
At the time of this writing, POE was in its tenth year. Still, its
documentation is extremely lacking, making it impossible to implement
stuff as trivial as AnyEvent watchers without having to resort to
lib/AnyEvent/Log.pm view on Meta::CPAN
context. Anonymous (C<%name>) contexts have no attached slaves by default,
but package contexts have the parent context as slave by default.
Example: log messages from My::Module to a file, do not send them to the
default log collector.
My::Module=+,file=/tmp/mymodulelog
=back
Any character can be escaped by prefixing it with a C<\> (backslash), as
usual, so to log to a file containing a comma, colon, backslash and some
spaces in the filename, you would do this:
PERL_ANYEVENT_LOG='log=file=/some\ \:file\ with\,\ \\-escapes'
Since whitespace (which includes newlines) is allowed, it is fine to
specify multiple lines in C<PERL_ANYEVENT_LOG>, e.g.:
PERL_ANYEVENT_LOG="
filter=warn
AnyEvent::Debug=+%trace
%trace=only,trace,+log
" myprog
( run in 0.315 second using v1.01-cache-2.11-cpan-c21f80fb71c )