AnyEvent 6 release candidate available for testing/review/...
Marc Lehmann
schmorp at schmorp.de
Sun Aug 21 05:15:38 CEST 2011
Hi!
I just tar'ed a release candidate for AnyEvent 6:
http://data.plan9.de/AnyEvent-6.01.tar.gz
It would be nice if somebody who is not me would give it a test before it
is released :)
The highlights of the upcoming release will be:
- bugfixes. *sigh*
- AnyEvent::Debug can now wrap all watchers, store an inventory of all
watchers active in the program and provide error history, create
backtrace, human readable callbacks and more information about callbacks.
Example AnyEvent:;:Debug::shell session:
> wl
41555896 AnyEvent:1438(detect)>io>AnyEvent::Socket:489
55336472 AnyEvent::DNS:799(new)>io>AnyEvent::DNS:139
55342208 AnyEvent::DNS:811(new)>io>AnyEvent::DNS:139
83540832 AnyEvent::Debug:436((eval))>io>AnyEvent::Debug:135
46602664 Coro::Debug:509(new_unix_server)>io>AnyEvent::Socket:489
49648120 DC::DB:472(Server::run)>io>DC::DB::Server::fh_read
50985392 DC::DB:510(open_db)>io>BDB::poll_cb
53102488 Deliantra::Protocol::Base:78(__ANON__)>io>Deliantra::Protocol::Base:78
> w 49648120
49648120 DC::DB:472(Server::run)>io>DC::DB::Server::fh_read
type: io watcher
args: poll r fh GLOB(0x2c71d68)
created: 2011-08-21 05:02:33.982064 +0200 (1313895753.98206)
file: /root2/src/deliantra/CFPlus/blib/lib/Deliantra/Client/private/DC/DB.pm
line: 472
subname: DC::DB::Server::run
context:
cb: CODE(0x246c1e0) (DC::DB::Server::fh_read)
invoked: 6 times
created
(eval 25) line 6 AnyEvent::Debug::Wrap::__ANON__('AnyEvent','fh',GLOB(0x2c71d68),'poll','r','cb',CODE(0x246c1e0)=DC::DB::Server::fh_read)
DC::DB line 472 AE::io(GLOB(0x2c71d68),'0',CODE(0x246c1e0)=DC::DB::Server::fh_read)
bin/deliantra line 2776 DC::DB::Server::run()
bin/deliantra line 2941 main::main()
- AnyEvent::Strict now also checks functions in the AE:: namespace.
- vastly improved, but still small, logging framework has been added (mostly
because AnyEvent itself needed one):
http://pod.tst.eu/http://cvs.schmorp.de/AnyEvent/lib/AnyEvent/Log.pm
Apart from making sure existing programs still "just work" (and that
memory usage didn't increase unless the new features are used), I would be
happy if the new features come in useful for some people (and elicit some
feedback).
The full list of changes so far are:
- INCOMPATIBLE CHANGE: AnyEvent::DNS resource records now include
the TTL as fourth element - this affects ->resolve, ->request
and ->dns_unpack indirectly. Convenience functions such as
AnyEvent::DNS::{a,txt,mx,srv} are not affected, neither is
AnyEvent::Socket.
- INCOMPATIBLE CHANGE: backend authors now should not implement
one_event or loop, but instead the AnyEvent::CondVar::_wait and _poll
methods.
- INCOMPATIBLE CHANGE: verbosity levels have been redefined, see
AnyEvent (PERL_ANYEVENT_VERBOSE) and AnyEvent::Log for details.
- DEPRECIATION: please change
"use AnyEvent::Impl::Perl" to "use AnyEvent::Loop" and
"AnyEvent::Impl::Perl::loop" to "AnyEvent::Loop::run"
in your programs, for future compatibility.
- *blush* idle watcher emulation was borked.
- AnyEvent::Strict now checks the AE::xxx functions as well.
- querying too long domain names would barf deep inside AnyEvent::DNS - since
this is hard to avoid for applications, AnyEvent:.DNS::request now checks for
for too long domain names explicitly and passes an undef to the callback
instead (reported by James Bromberger).
- make AnyEvent::Util more robust against EINTR (analyzed by Andrew Suffield).
- new functions: AnyEvent::postpone, AnyEvent::log.
- new module: AnyEvent::Log, for simple logging needs.
- new env variable, PERL_ANYEVENT_DEBUG_SHELL, to automatically start
a debug shell.
- new env variable, PERL_ANYEVENT_DEBUG_WRAP, to automatically enable
watcher instrumentation/wrapping (see AnyEvent::Debug::wrap).
- lots of new AnyEvent::Debug functionality.
- AnyEvent::Strict now checks for modifications $_ by the callback
(by setting it to readonly while executing the callback, if possible).
- IO::Async sometimes cancels the wrong timer when you call cancel_timer.
Invest extra overhead to work around this peculiar behaviour.
- split the pure perl backend into a loop module and an impl
module (AnyEvent::Loop and AnyEvent::Impl::Perl).
- some read types (regex, netstring, json, storable) could
errornously keep an AE::Handle object alive on their own
(reported by Mohammad Toossi).
- add more workarounds around child watcher bugs in IO::Async
and (newly introduced) in POE.
- use glib child watchers and try to work around its limitations,
if possible (based on a patch by Kevin Ryde).
- add support for FLTK (fltk2), via AnyEvent::Impl::FLTK2.
- many read types in AnyEvent::Handle would malfunction during
transitions to TLS because of a "delete $self->{rbuf}".
(reported by Gerald Galster).
- improve condvar blocking wait performance (probably only noticable
with faster backends), also make it easier for event loops that
do not support blocking waits.
- PERL_ANYEVENT_MODEL now also allows full module names, although
the usefulness of this feature is not yet clear.
- add tests for all supported event loops, conditional on PERL_ANYEVENT_LOOP_TESTS.
- add t/80_ssltext.t.
- no longer use AUTOLOAD for the initial loading (for no very good reason).
- tcp_server now tries to unlink unix domain sockets when it gets destroyed.
- do not run event loop detection multiple times when programs call their cached
copies of AnyEvent::detect.
- parse_hostport now accepts absolute paths als unix domain sockets.
- add Task::Weaken as dependency (as recommends only at this time).
Thanks for your attention :)
--
The choice of a Deliantra, the free code+content MORPG
-----==- _GNU_ http://www.deliantra.net
----==-- _ generation
---==---(_)__ __ ____ __ Marc Lehmann
--==---/ / _ \/ // /\ \/ / schmorp at schmorp.de
-=====/_/_//_/\_,_/ /_/\_\
More information about the anyevent
mailing list