ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent.pm
(Generate patch)

Comparing AnyEvent/lib/AnyEvent.pm (file contents):
Revision 1.389 by root, Tue Oct 4 05:34:50 2011 UTC vs.
Revision 1.408 by root, Thu Dec 6 12:04:23 2012 UTC

433as you cannot do race-free signal handling in perl, requiring 433as you cannot do race-free signal handling in perl, requiring
434C libraries for this. AnyEvent will try to do its best, which 434C libraries for this. AnyEvent will try to do its best, which
435means in some cases, signals will be delayed. The maximum time 435means in some cases, signals will be delayed. The maximum time
436a signal might be delayed is 10 seconds by default, but can 436a signal might be delayed is 10 seconds by default, but can
437be overriden via C<$ENV{PERL_ANYEVENT_MAX_SIGNAL_LATENCY}> or 437be overriden via C<$ENV{PERL_ANYEVENT_MAX_SIGNAL_LATENCY}> or
438C<$AnyEvent::MAX_SIGNAL_LATENCY> - see the Ö<ENVIRONMENT VARIABLES> 438C<$AnyEvent::MAX_SIGNAL_LATENCY> - see the L<ENVIRONMENT VARIABLES>
439section for details. 439section for details.
440 440
441All these problems can be avoided by installing the optional 441All these problems can be avoided by installing the optional
442L<Async::Interrupt> module, which works with most event loops. It will not 442L<Async::Interrupt> module, which works with most event loops. It will not
443work with inherently broken event loops such as L<Event> or L<Event::Lib> 443work with inherently broken event loops such as L<Event> or L<Event::Lib>
763 }; 763 };
764 } 764 }
765 765
766 $cv->end; 766 $cv->end;
767 767
768 ...
769
770 my $results = $cv->recv;
771
768This code fragment supposedly pings a number of hosts and calls 772This code fragment supposedly pings a number of hosts and calls
769C<send> after results for all then have have been gathered - in any 773C<send> after results for all then have have been gathered - in any
770order. To achieve this, the code issues a call to C<begin> when it starts 774order. To achieve this, the code issues a call to C<begin> when it starts
771each ping request and calls C<end> when it has received some result for 775each ping request and calls C<end> when it has received some result for
772it. Since C<begin> and C<end> only maintain a counter, the order in which 776it. Since C<begin> and C<end> only maintain a counter, the order in which
1223 1227
1224package AnyEvent; 1228package AnyEvent;
1225 1229
1226# basically a tuned-down version of common::sense 1230# basically a tuned-down version of common::sense
1227sub common_sense { 1231sub common_sense {
1228 # from common:.sense 3.4 1232 # from common:.sense 3.5
1233 local $^W;
1229 ${^WARNING_BITS} ^= ${^WARNING_BITS} ^ "\x3c\x3f\x33\x00\x0f\xf0\x0f\xc0\xf0\xfc\x33\x00"; 1234 ${^WARNING_BITS} ^= ${^WARNING_BITS} ^ "\x3c\x3f\x33\x00\x0f\xf0\x0f\xc0\xf0\xfc\x33\x00";
1230 # use strict vars subs - NO UTF-8, as Util.pm doesn't like this atm. (uts46data.pl) 1235 # use strict vars subs - NO UTF-8, as Util.pm doesn't like this atm. (uts46data.pl)
1231 $^H |= 0x00000600; 1236 $^H |= 0x00000600;
1232} 1237}
1233 1238
1234BEGIN { AnyEvent::common_sense } 1239BEGIN { AnyEvent::common_sense }
1235 1240
1236use Carp (); 1241use Carp ();
1237 1242
1238our $VERSION = '6.02'; 1243our $VERSION = '7.04';
1239our $MODEL; 1244our $MODEL;
1240our @ISA; 1245our @ISA;
1241our @REGISTRY; 1246our @REGISTRY;
1242our $VERBOSE; 1247our $VERBOSE;
1243our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred 1248our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred
1395 1400
1396 # IO::Async::Loop::AnyEvent is extremely evil, refuse to work with it 1401 # IO::Async::Loop::AnyEvent is extremely evil, refuse to work with it
1397 # the author knows about the problems and what it does to AnyEvent as a whole 1402 # the author knows about the problems and what it does to AnyEvent as a whole
1398 # (and the ability of others to use AnyEvent), but simply wants to abuse AnyEvent 1403 # (and the ability of others to use AnyEvent), but simply wants to abuse AnyEvent
1399 # anyway. 1404 # anyway.
1400 AnyEvent::log fatal => "AnyEvent: IO::Async::Loop::AnyEvent detected - this module is broken by design,\n" 1405 AnyEvent::log fatal => "IO::Async::Loop::AnyEvent detected - that module is broken by\n"
1401 . "abuses internals and breaks AnyEvent, will not continue." 1406 . "design, abuses internals and breaks AnyEvent - will not continue."
1402 if exists $INC{"IO/Async/Loop/AnyEvent.pm"}; 1407 if exists $INC{"IO/Async/Loop/AnyEvent.pm"};
1403 1408
1404 local $!; # for good measure 1409 local $!; # for good measure
1405 local $SIG{__DIE__}; # we use eval 1410 local $SIG{__DIE__}; # we use eval
1406 1411
1416 1421
1417 if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) { 1422 if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) {
1418 my $model = $1; 1423 my $model = $1;
1419 $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//; 1424 $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//;
1420 if (eval "require $model") { 1425 if (eval "require $model") {
1421 AnyEvent::log 7 => "loaded model '$model' (forced by \$ENV{PERL_ANYEVENT_MODEL}), using it."; 1426 AnyEvent::log 7 => "Loaded model '$model' (forced by \$ENV{PERL_ANYEVENT_MODEL}), using it.";
1422 $MODEL = $model; 1427 $MODEL = $model;
1423 } else { 1428 } else {
1424 AnyEvent::log 4 => "unable to load model '$model' (from \$ENV{PERL_ANYEVENT_MODEL}):\n$@"; 1429 AnyEvent::log 4 => "Unable to load model '$model' (from \$ENV{PERL_ANYEVENT_MODEL}):\n$@";
1425 } 1430 }
1426 } 1431 }
1427 1432
1428 # check for already loaded models 1433 # check for already loaded models
1429 unless ($MODEL) { 1434 unless ($MODEL) {
1430 for (@REGISTRY, @models) { 1435 for (@REGISTRY, @models) {
1431 my ($package, $model) = @$_; 1436 my ($package, $model) = @$_;
1432 if (${"$package\::VERSION"} > 0) { 1437 if (${"$package\::VERSION"} > 0) {
1433 if (eval "require $model") { 1438 if (eval "require $model") {
1434 AnyEvent::log 7 => "autodetected model '$model', using it."; 1439 AnyEvent::log 7 => "Autodetected model '$model', using it.";
1435 $MODEL = $model; 1440 $MODEL = $model;
1436 last; 1441 last;
1442 } else {
1443 AnyEvent::log 8 => "Detected event loop $package, but cannot load '$model', skipping: $@";
1437 } 1444 }
1438 } 1445 }
1439 } 1446 }
1440 1447
1441 unless ($MODEL) { 1448 unless ($MODEL) {
1445 if ( 1452 if (
1446 eval "require $package" 1453 eval "require $package"
1447 and ${"$package\::VERSION"} > 0 1454 and ${"$package\::VERSION"} > 0
1448 and eval "require $model" 1455 and eval "require $model"
1449 ) { 1456 ) {
1450 AnyEvent::log 7 => "autoloaded model '$model', using it."; 1457 AnyEvent::log 7 => "Autoloaded model '$model', using it.";
1451 $MODEL = $model; 1458 $MODEL = $model;
1452 last; 1459 last;
1453 } 1460 }
1454 } 1461 }
1455 1462
1456 $MODEL 1463 $MODEL
1457 or AnyEvent::log fatal => "AnyEvent: backend autodetection failed - did you properly install AnyEvent?"; 1464 or AnyEvent::log fatal => "Backend autodetection failed - did you properly install AnyEvent?";
1458 } 1465 }
1459 } 1466 }
1460 1467
1461 # free memory only needed for probing 1468 # free memory only needed for probing
1462 undef @models; 1469 undef @models;
1609 # probe for availability of Time::HiRes 1616 # probe for availability of Time::HiRes
1610 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") { 1617 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") {
1611 *time = sub { Time::HiRes::time () }; 1618 *time = sub { Time::HiRes::time () };
1612 *AE::time = \& Time::HiRes::time ; 1619 *AE::time = \& Time::HiRes::time ;
1613 *now = \&time; 1620 *now = \&time;
1614 AnyEvent::log 8 => "AnyEvent: using Time::HiRes for sub-second timing accuracy."; 1621 AnyEvent::log 8 => "using Time::HiRes for sub-second timing accuracy.";
1615 # if (eval "use POSIX (); (POSIX::times())... 1622 # if (eval "use POSIX (); (POSIX::times())...
1616 } else { 1623 } else {
1617 *time = sub { CORE::time }; 1624 *time = sub { CORE::time };
1618 *AE::time = sub (){ CORE::time }; 1625 *AE::time = sub (){ CORE::time };
1619 *now = \&time; 1626 *now = \&time;
1620 AnyEvent::log 3 => "using built-in time(), WARNING, no sub-second resolution!"; 1627 AnyEvent::log 3 => "Using built-in time(), no sub-second resolution!";
1621 } 1628 }
1622 }; 1629 };
1623 die if $@; 1630 die if $@;
1624 1631
1625 &time 1632 &time
1719 1726
1720sub signal { 1727sub signal {
1721 eval q{ # poor man's autoloading {} 1728 eval q{ # poor man's autoloading {}
1722 # probe for availability of Async::Interrupt 1729 # probe for availability of Async::Interrupt
1723 if (_have_async_interrupt) { 1730 if (_have_async_interrupt) {
1724 AnyEvent::log 8 => "using Async::Interrupt for race-free signal handling."; 1731 AnyEvent::log 8 => "Using Async::Interrupt for race-free signal handling.";
1725 1732
1726 $SIGPIPE_R = new Async::Interrupt::EventPipe; 1733 $SIGPIPE_R = new Async::Interrupt::EventPipe;
1727 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec; 1734 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec;
1728 1735
1729 } else { 1736 } else {
1730 AnyEvent::log 8 => "using emulated perl signal handling with latency timer."; 1737 AnyEvent::log 8 => "Using emulated perl signal handling with latency timer.";
1731 1738
1732 if (AnyEvent::WIN32) { 1739 if (AnyEvent::WIN32) {
1733 require AnyEvent::Util; 1740 require AnyEvent::Util;
1734 1741
1735 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe (); 1742 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe ();
2071 2078
2072=over 4 2079=over 4
2073 2080
2074=item C<PERL_ANYEVENT_VERBOSE> 2081=item C<PERL_ANYEVENT_VERBOSE>
2075 2082
2076By default, AnyEvent will only log messages with loglevel C<3> 2083By default, AnyEvent will log messages with loglevel C<4> (C<error>) or
2077(C<critical>) or higher (see L<AnyEvent::Log>). You can set this 2084higher (see L<AnyEvent::Log>). You can set this environment variable to a
2078environment variable to a numerical loglevel to make AnyEvent more (or 2085numerical loglevel to make AnyEvent more (or less) talkative.
2079less) talkative.
2080 2086
2081If you want to do more than just set the global logging level 2087If you want to do more than just set the global logging level
2082you should have a look at C<PERL_ANYEVENT_LOG>, which allows much more 2088you should have a look at C<PERL_ANYEVENT_LOG>, which allows much more
2083complex specifications. 2089complex specifications.
2084 2090
2085When set to C<0> (C<off>), then no messages whatsoever will be logged with 2091When set to C<0> (C<off>), then no messages whatsoever will be logged with
2086the default logging settings. 2092everything else at defaults.
2087 2093
2088When set to C<5> or higher (C<warn>), causes AnyEvent to warn about 2094When set to C<5> or higher (C<warn>), AnyEvent warns about unexpected
2089unexpected conditions, such as not being able to load the event model 2095conditions, such as not being able to load the event model specified by
2090specified by C<PERL_ANYEVENT_MODEL>, or a guard callback throwing an 2096C<PERL_ANYEVENT_MODEL>, or a guard callback throwing an exception - this
2091exception - this is the minimum recommended level. 2097is the minimum recommended level for use during development.
2092 2098
2093When set to C<7> or higher (info), cause AnyEvent to report which event model it 2099When set to C<7> or higher (info), AnyEvent reports which event model it
2094chooses. 2100chooses.
2095 2101
2096When set to C<8> or higher (debug), then AnyEvent will report extra information on 2102When set to C<8> or higher (debug), then AnyEvent will report extra
2097which optional modules it loads and how it implements certain features. 2103information on which optional modules it loads and how it implements
2104certain features.
2098 2105
2099=item C<PERL_ANYEVENT_LOG> 2106=item C<PERL_ANYEVENT_LOG>
2100 2107
2101Accepts rather complex logging specifications. For example, you could log 2108Accepts rather complex logging specifications. For example, you could log
2102all C<debug> messages of some module to stderr, warnings and above to 2109all C<debug> messages of some module to stderr, warnings and above to
2109This variable is evaluated when AnyEvent (or L<AnyEvent::Log>) is loaded, 2116This variable is evaluated when AnyEvent (or L<AnyEvent::Log>) is loaded,
2110so will take effect even before AnyEvent has initialised itself. 2117so will take effect even before AnyEvent has initialised itself.
2111 2118
2112Note that specifying this environment variable causes the L<AnyEvent::Log> 2119Note that specifying this environment variable causes the L<AnyEvent::Log>
2113module to be loaded, while C<PERL_ANYEVENT_VERBOSE> does not, so only 2120module to be loaded, while C<PERL_ANYEVENT_VERBOSE> does not, so only
2114using the latter saves a few hundred kB of memory until the first message 2121using the latter saves a few hundred kB of memory unless a module
2115is being logged. 2122explicitly needs the extra features of AnyEvent::Log.
2116 2123
2117=item C<PERL_ANYEVENT_STRICT> 2124=item C<PERL_ANYEVENT_STRICT>
2118 2125
2119AnyEvent does not do much argument checking by default, as thorough 2126AnyEvent does not do much argument checking by default, as thorough
2120argument checking is very costly. Setting this variable to a true value 2127argument checking is very costly. Setting this variable to a true value
2174 2181
2175For example, to force the pure perl model (L<AnyEvent::Loop::Perl>) you 2182For example, to force the pure perl model (L<AnyEvent::Loop::Perl>) you
2176could start your program like this: 2183could start your program like this:
2177 2184
2178 PERL_ANYEVENT_MODEL=Perl perl ... 2185 PERL_ANYEVENT_MODEL=Perl perl ...
2186
2187=item C<PERL_ANYEVENT_IO_MODEL>
2188
2189The current file I/O model - see L<AnyEvent::IO> for more info.
2190
2191At the moment, only C<Perl> (small, pure-perl, synchronous) and
2192C<IOAIO> (truly asynchronous) are supported. The default is C<IOAIO> if
2193L<AnyEvent::AIO> can be loaded, otherwise it is C<Perl>.
2179 2194
2180=item C<PERL_ANYEVENT_PROTOCOLS> 2195=item C<PERL_ANYEVENT_PROTOCOLS>
2181 2196
2182Used by both L<AnyEvent::DNS> and L<AnyEvent::Socket> to determine preferences 2197Used by both L<AnyEvent::DNS> and L<AnyEvent::Socket> to determine preferences
2183for IPv4 or IPv6. The default is unspecified (and might change, or be the result 2198for IPv4 or IPv6. The default is unspecified (and might change, or be the result
3002L<AnyEvent::Impl::FLTK>. 3017L<AnyEvent::Impl::FLTK>.
3003 3018
3004Non-blocking handles, pipes, stream sockets, TCP clients and 3019Non-blocking handles, pipes, stream sockets, TCP clients and
3005servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>. 3020servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>.
3006 3021
3022Asynchronous File I/O: L<AnyEvent::IO>.
3023
3007Asynchronous DNS: L<AnyEvent::DNS>. 3024Asynchronous DNS: L<AnyEvent::DNS>.
3008 3025
3009Thread support: L<Coro>, L<Coro::AnyEvent>, L<Coro::EV>, L<Coro::Event>. 3026Thread support: L<Coro>, L<Coro::AnyEvent>, L<Coro::EV>, L<Coro::Event>.
3010 3027
3011Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>, 3028Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>,
3013 3030
3014 3031
3015=head1 AUTHOR 3032=head1 AUTHOR
3016 3033
3017 Marc Lehmann <schmorp@schmorp.de> 3034 Marc Lehmann <schmorp@schmorp.de>
3018 http://home.schmorp.de/ 3035 http://anyevent.schmorp.de
3019 3036
3020=cut 3037=cut
3021 3038
30221 30391
3023 3040

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines