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.395 by root, Tue Jan 31 19:03:16 2012 UTC vs.
Revision 1.409 by root, Thu Dec 6 12:10:09 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
807 811
808In list context, all parameters passed to C<send> will be returned, 812In list context, all parameters passed to C<send> will be returned,
809in scalar context only the first one will be returned. 813in scalar context only the first one will be returned.
810 814
811Note that doing a blocking wait in a callback is not supported by any 815Note that doing a blocking wait in a callback is not supported by any
812event loop, that is, recursive invocation of a blocking C<< ->recv 816event loop, that is, recursive invocation of a blocking C<< ->recv >> is
813>> is not allowed, and the C<recv> call will C<croak> if such a 817not allowed and the C<recv> call will C<croak> if such a condition is
814condition is detected. This condition can be slightly loosened by using 818detected. This requirement can be dropped by relying on L<Coro::AnyEvent>
815L<Coro::AnyEvent>, which allows you to do a blocking C<< ->recv >> from 819, which allows you to do a blocking C<< ->recv >> from any thread
816any thread that doesn't run the event loop itself. 820that doesn't run the event loop itself. L<Coro::AnyEvent> is loaded
821automatically when L<Coro> is used with L<AnyEvent>, so code does not need
822to do anything special to take advantage of that: any code that would
823normally block your program because it calls C<recv>, be executed in an
824C<async> thread instead without blocking other threads.
817 825
818Not all event models support a blocking wait - some die in that case 826Not all event models support a blocking wait - some die in that case
819(programs might want to do that to stay interactive), so I<if you are 827(programs might want to do that to stay interactive), so I<if you are
820using this from a module, never require a blocking wait>. Instead, let the 828using this from a module, never require a blocking wait>. Instead, let the
821caller decide whether the call will block or not (for example, by coupling 829caller decide whether the call will block or not (for example, by coupling
1223 1231
1224package AnyEvent; 1232package AnyEvent;
1225 1233
1226# basically a tuned-down version of common::sense 1234# basically a tuned-down version of common::sense
1227sub common_sense { 1235sub common_sense {
1228 # from common:.sense 3.4 1236 # from common:.sense 3.5
1237 local $^W;
1229 ${^WARNING_BITS} ^= ${^WARNING_BITS} ^ "\x3c\x3f\x33\x00\x0f\xf0\x0f\xc0\xf0\xfc\x33\x00"; 1238 ${^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) 1239 # use strict vars subs - NO UTF-8, as Util.pm doesn't like this atm. (uts46data.pl)
1231 $^H |= 0x00000600; 1240 $^H |= 0x00000600;
1232} 1241}
1233 1242
1234BEGIN { AnyEvent::common_sense } 1243BEGIN { AnyEvent::common_sense }
1235 1244
1236use Carp (); 1245use Carp ();
1237 1246
1238our $VERSION = '6.14'; 1247our $VERSION = '7.04';
1239our $MODEL; 1248our $MODEL;
1240our @ISA; 1249our @ISA;
1241our @REGISTRY; 1250our @REGISTRY;
1242our $VERBOSE; 1251our $VERBOSE;
1243our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred 1252our %PROTOCOL; # (ipv4|ipv6) => (1|2), higher numbers are preferred
1395 1404
1396 # IO::Async::Loop::AnyEvent is extremely evil, refuse to work with it 1405 # 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 1406 # 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 1407 # (and the ability of others to use AnyEvent), but simply wants to abuse AnyEvent
1399 # anyway. 1408 # anyway.
1400 AnyEvent::log fatal => "AnyEvent: IO::Async::Loop::AnyEvent detected - that module is broken by\n" 1409 AnyEvent::log fatal => "IO::Async::Loop::AnyEvent detected - that module is broken by\n"
1401 . "design, abuses internals and breaks AnyEvent - will not continue." 1410 . "design, abuses internals and breaks AnyEvent - will not continue."
1402 if exists $INC{"IO/Async/Loop/AnyEvent.pm"}; 1411 if exists $INC{"IO/Async/Loop/AnyEvent.pm"};
1403 1412
1404 local $!; # for good measure 1413 local $!; # for good measure
1405 local $SIG{__DIE__}; # we use eval 1414 local $SIG{__DIE__}; # we use eval
1416 1425
1417 if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) { 1426 if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z0-9:]+)$/) {
1418 my $model = $1; 1427 my $model = $1;
1419 $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//; 1428 $model = "AnyEvent::Impl::$model" unless $model =~ s/::$//;
1420 if (eval "require $model") { 1429 if (eval "require $model") {
1421 AnyEvent::log 7 => "loaded model '$model' (forced by \$ENV{PERL_ANYEVENT_MODEL}), using it."; 1430 AnyEvent::log 7 => "Loaded model '$model' (forced by \$ENV{PERL_ANYEVENT_MODEL}), using it.";
1422 $MODEL = $model; 1431 $MODEL = $model;
1423 } else { 1432 } else {
1424 AnyEvent::log 4 => "unable to load model '$model' (from \$ENV{PERL_ANYEVENT_MODEL}):\n$@"; 1433 AnyEvent::log 4 => "Unable to load model '$model' (from \$ENV{PERL_ANYEVENT_MODEL}):\n$@";
1425 } 1434 }
1426 } 1435 }
1427 1436
1428 # check for already loaded models 1437 # check for already loaded models
1429 unless ($MODEL) { 1438 unless ($MODEL) {
1430 for (@REGISTRY, @models) { 1439 for (@REGISTRY, @models) {
1431 my ($package, $model) = @$_; 1440 my ($package, $model) = @$_;
1432 if (${"$package\::VERSION"} > 0) { 1441 if (${"$package\::VERSION"} > 0) {
1433 if (eval "require $model") { 1442 if (eval "require $model") {
1434 AnyEvent::log 7 => "autodetected model '$model', using it."; 1443 AnyEvent::log 7 => "Autodetected model '$model', using it.";
1435 $MODEL = $model; 1444 $MODEL = $model;
1436 last; 1445 last;
1437 } else { 1446 } else {
1438 AnyEvent::log 8 => "detected event loop $package, but cannot load '$model', skipping: $@"; 1447 AnyEvent::log 8 => "Detected event loop $package, but cannot load '$model', skipping: $@";
1439 } 1448 }
1440 } 1449 }
1441 } 1450 }
1442 1451
1443 unless ($MODEL) { 1452 unless ($MODEL) {
1447 if ( 1456 if (
1448 eval "require $package" 1457 eval "require $package"
1449 and ${"$package\::VERSION"} > 0 1458 and ${"$package\::VERSION"} > 0
1450 and eval "require $model" 1459 and eval "require $model"
1451 ) { 1460 ) {
1452 AnyEvent::log 7 => "autoloaded model '$model', using it."; 1461 AnyEvent::log 7 => "Autoloaded model '$model', using it.";
1453 $MODEL = $model; 1462 $MODEL = $model;
1454 last; 1463 last;
1455 } 1464 }
1456 } 1465 }
1457 1466
1458 $MODEL 1467 $MODEL
1459 or AnyEvent::log fatal => "AnyEvent: backend autodetection failed - did you properly install AnyEvent?"; 1468 or AnyEvent::log fatal => "Backend autodetection failed - did you properly install AnyEvent?";
1460 } 1469 }
1461 } 1470 }
1462 1471
1463 # free memory only needed for probing 1472 # free memory only needed for probing
1464 undef @models; 1473 undef @models;
1611 # probe for availability of Time::HiRes 1620 # probe for availability of Time::HiRes
1612 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") { 1621 if (eval "use Time::HiRes (); Time::HiRes::time (); 1") {
1613 *time = sub { Time::HiRes::time () }; 1622 *time = sub { Time::HiRes::time () };
1614 *AE::time = \& Time::HiRes::time ; 1623 *AE::time = \& Time::HiRes::time ;
1615 *now = \&time; 1624 *now = \&time;
1616 AnyEvent::log 8 => "AnyEvent: using Time::HiRes for sub-second timing accuracy."; 1625 AnyEvent::log 8 => "using Time::HiRes for sub-second timing accuracy.";
1617 # if (eval "use POSIX (); (POSIX::times())... 1626 # if (eval "use POSIX (); (POSIX::times())...
1618 } else { 1627 } else {
1619 *time = sub { CORE::time }; 1628 *time = sub { CORE::time };
1620 *AE::time = sub (){ CORE::time }; 1629 *AE::time = sub (){ CORE::time };
1621 *now = \&time; 1630 *now = \&time;
1622 AnyEvent::log 3 => "using built-in time(), WARNING, no sub-second resolution!"; 1631 AnyEvent::log 3 => "Using built-in time(), no sub-second resolution!";
1623 } 1632 }
1624 }; 1633 };
1625 die if $@; 1634 die if $@;
1626 1635
1627 &time 1636 &time
1721 1730
1722sub signal { 1731sub signal {
1723 eval q{ # poor man's autoloading {} 1732 eval q{ # poor man's autoloading {}
1724 # probe for availability of Async::Interrupt 1733 # probe for availability of Async::Interrupt
1725 if (_have_async_interrupt) { 1734 if (_have_async_interrupt) {
1726 AnyEvent::log 8 => "using Async::Interrupt for race-free signal handling."; 1735 AnyEvent::log 8 => "Using Async::Interrupt for race-free signal handling.";
1727 1736
1728 $SIGPIPE_R = new Async::Interrupt::EventPipe; 1737 $SIGPIPE_R = new Async::Interrupt::EventPipe;
1729 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec; 1738 $SIG_IO = AE::io $SIGPIPE_R->fileno, 0, \&_signal_exec;
1730 1739
1731 } else { 1740 } else {
1732 AnyEvent::log 8 => "using emulated perl signal handling with latency timer."; 1741 AnyEvent::log 8 => "Using emulated perl signal handling with latency timer.";
1733 1742
1734 if (AnyEvent::WIN32) { 1743 if (AnyEvent::WIN32) {
1735 require AnyEvent::Util; 1744 require AnyEvent::Util;
1736 1745
1737 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe (); 1746 ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe ();
2073 2082
2074=over 4 2083=over 4
2075 2084
2076=item C<PERL_ANYEVENT_VERBOSE> 2085=item C<PERL_ANYEVENT_VERBOSE>
2077 2086
2078By default, AnyEvent will only log messages with loglevel C<3> 2087By default, AnyEvent will log messages with loglevel C<4> (C<error>) or
2079(C<critical>) or higher (see L<AnyEvent::Log>). You can set this 2088higher (see L<AnyEvent::Log>). You can set this environment variable to a
2080environment variable to a numerical loglevel to make AnyEvent more (or 2089numerical loglevel to make AnyEvent more (or less) talkative.
2081less) talkative.
2082 2090
2083If you want to do more than just set the global logging level 2091If you want to do more than just set the global logging level
2084you should have a look at C<PERL_ANYEVENT_LOG>, which allows much more 2092you should have a look at C<PERL_ANYEVENT_LOG>, which allows much more
2085complex specifications. 2093complex specifications.
2086 2094
2087When set to C<0> (C<off>), then no messages whatsoever will be logged with 2095When set to C<0> (C<off>), then no messages whatsoever will be logged with
2088the default logging settings. 2096everything else at defaults.
2089 2097
2090When set to C<5> or higher (C<warn>), causes AnyEvent to warn about 2098When set to C<5> or higher (C<warn>), AnyEvent warns about unexpected
2091unexpected conditions, such as not being able to load the event model 2099conditions, such as not being able to load the event model specified by
2092specified by C<PERL_ANYEVENT_MODEL>, or a guard callback throwing an 2100C<PERL_ANYEVENT_MODEL>, or a guard callback throwing an exception - this
2093exception - this is the minimum recommended level. 2101is the minimum recommended level for use during development.
2094 2102
2095When set to C<7> or higher (info), cause AnyEvent to report which event model it 2103When set to C<7> or higher (info), AnyEvent reports which event model it
2096chooses. 2104chooses.
2097 2105
2098When set to C<8> or higher (debug), then AnyEvent will report extra information on 2106When set to C<8> or higher (debug), then AnyEvent will report extra
2099which optional modules it loads and how it implements certain features. 2107information on which optional modules it loads and how it implements
2108certain features.
2100 2109
2101=item C<PERL_ANYEVENT_LOG> 2110=item C<PERL_ANYEVENT_LOG>
2102 2111
2103Accepts rather complex logging specifications. For example, you could log 2112Accepts rather complex logging specifications. For example, you could log
2104all C<debug> messages of some module to stderr, warnings and above to 2113all C<debug> messages of some module to stderr, warnings and above to
2111This variable is evaluated when AnyEvent (or L<AnyEvent::Log>) is loaded, 2120This variable is evaluated when AnyEvent (or L<AnyEvent::Log>) is loaded,
2112so will take effect even before AnyEvent has initialised itself. 2121so will take effect even before AnyEvent has initialised itself.
2113 2122
2114Note that specifying this environment variable causes the L<AnyEvent::Log> 2123Note that specifying this environment variable causes the L<AnyEvent::Log>
2115module to be loaded, while C<PERL_ANYEVENT_VERBOSE> does not, so only 2124module to be loaded, while C<PERL_ANYEVENT_VERBOSE> does not, so only
2116using the latter saves a few hundred kB of memory until the first message 2125using the latter saves a few hundred kB of memory unless a module
2117is being logged. 2126explicitly needs the extra features of AnyEvent::Log.
2118 2127
2119=item C<PERL_ANYEVENT_STRICT> 2128=item C<PERL_ANYEVENT_STRICT>
2120 2129
2121AnyEvent does not do much argument checking by default, as thorough 2130AnyEvent does not do much argument checking by default, as thorough
2122argument checking is very costly. Setting this variable to a true value 2131argument checking is very costly. Setting this variable to a true value
2176 2185
2177For example, to force the pure perl model (L<AnyEvent::Loop::Perl>) you 2186For example, to force the pure perl model (L<AnyEvent::Loop::Perl>) you
2178could start your program like this: 2187could start your program like this:
2179 2188
2180 PERL_ANYEVENT_MODEL=Perl perl ... 2189 PERL_ANYEVENT_MODEL=Perl perl ...
2190
2191=item C<PERL_ANYEVENT_IO_MODEL>
2192
2193The current file I/O model - see L<AnyEvent::IO> for more info.
2194
2195At the moment, only C<Perl> (small, pure-perl, synchronous) and
2196C<IOAIO> (truly asynchronous) are supported. The default is C<IOAIO> if
2197L<AnyEvent::AIO> can be loaded, otherwise it is C<Perl>.
2181 2198
2182=item C<PERL_ANYEVENT_PROTOCOLS> 2199=item C<PERL_ANYEVENT_PROTOCOLS>
2183 2200
2184Used by both L<AnyEvent::DNS> and L<AnyEvent::Socket> to determine preferences 2201Used by both L<AnyEvent::DNS> and L<AnyEvent::Socket> to determine preferences
2185for IPv4 or IPv6. The default is unspecified (and might change, or be the result 2202for IPv4 or IPv6. The default is unspecified (and might change, or be the result
3004L<AnyEvent::Impl::FLTK>. 3021L<AnyEvent::Impl::FLTK>.
3005 3022
3006Non-blocking handles, pipes, stream sockets, TCP clients and 3023Non-blocking handles, pipes, stream sockets, TCP clients and
3007servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>. 3024servers: L<AnyEvent::Handle>, L<AnyEvent::Socket>, L<AnyEvent::TLS>.
3008 3025
3026Asynchronous File I/O: L<AnyEvent::IO>.
3027
3009Asynchronous DNS: L<AnyEvent::DNS>. 3028Asynchronous DNS: L<AnyEvent::DNS>.
3010 3029
3011Thread support: L<Coro>, L<Coro::AnyEvent>, L<Coro::EV>, L<Coro::Event>. 3030Thread support: L<Coro>, L<Coro::AnyEvent>, L<Coro::EV>, L<Coro::Event>.
3012 3031
3013Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>, 3032Nontrivial usage examples: L<AnyEvent::GPSD>, L<AnyEvent::IRC>,
3015 3034
3016 3035
3017=head1 AUTHOR 3036=head1 AUTHOR
3018 3037
3019 Marc Lehmann <schmorp@schmorp.de> 3038 Marc Lehmann <schmorp@schmorp.de>
3020 http://home.schmorp.de/ 3039 http://anyevent.schmorp.de
3021 3040
3022=cut 3041=cut
3023 3042
30241 30431
3025 3044

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines