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.218 by root, Wed Jun 24 10:03:42 2009 UTC vs.
Revision 1.219 by root, Thu Jun 25 11:16:08 2009 UTC

392 392
393There is a slight catch to child watchers, however: you usually start them 393There is a slight catch to child watchers, however: you usually start them
394I<after> the child process was created, and this means the process could 394I<after> the child process was created, and this means the process could
395have exited already (and no SIGCHLD will be sent anymore). 395have exited already (and no SIGCHLD will be sent anymore).
396 396
397Not all event models handle this correctly (POE doesn't), but even for 397Not all event models handle this correctly (neither POE nor IO::Async do,
398see their AnyEvent::Impl manpages for details), but even for event models
398event models that I<do> handle this correctly, they usually need to be 399that I<do> handle this correctly, they usually need to be loaded before
399loaded before the process exits (i.e. before you fork in the first place). 400the process exits (i.e. before you fork in the first place). AnyEvent's
401pure perl event loop handles all cases correctly regardless of when you
402start the watcher.
400 403
401This means you cannot create a child watcher as the very first thing in an 404This means you cannot create a child watcher as the very first
402AnyEvent program, you I<have> to create at least one watcher before you 405thing in an AnyEvent program, you I<have> to create at least one
403C<fork> the child (alternatively, you can call C<AnyEvent::detect>). 406watcher before you C<fork> the child (alternatively, you can call
407C<AnyEvent::detect>).
404 408
405Example: fork a process and wait for it 409Example: fork a process and wait for it
406 410
407 my $done = AnyEvent->condvar; 411 my $done = AnyEvent->condvar;
408 412
730 AnyEvent::Impl::Tk based on Tk, very bad choice. 734 AnyEvent::Impl::Tk based on Tk, very bad choice.
731 AnyEvent::Impl::Qt based on Qt, cannot be autoprobed (see its docs). 735 AnyEvent::Impl::Qt based on Qt, cannot be autoprobed (see its docs).
732 AnyEvent::Impl::EventLib based on Event::Lib, leaks memory and worse. 736 AnyEvent::Impl::EventLib based on Event::Lib, leaks memory and worse.
733 AnyEvent::Impl::POE based on POE, not generic enough for full support. 737 AnyEvent::Impl::POE based on POE, not generic enough for full support.
734 738
739 # warning, support for IO::Async is only partial, as it is too broken
740 # and limited toe ven support the AnyEvent API. See AnyEvent::Impl::Async.
741 AnyEvent::Impl::IOAsync based on IO::Async, cannot be autoprobed (see its docs).
742
735There is no support for WxWidgets, as WxWidgets has no support for 743There is no support for WxWidgets, as WxWidgets has no support for
736watching file handles. However, you can use WxWidgets through the 744watching file handles. However, you can use WxWidgets through the
737POE Adaptor, as POE has a Wx backend that simply polls 20 times per 745POE Adaptor, as POE has a Wx backend that simply polls 20 times per
738second, which was considered to be too horrible to even consider for 746second, which was considered to be too horrible to even consider for
739AnyEvent. Likewise, other POE backends can be used by AnyEvent by using 747AnyEvent. Likewise, other POE backends can be used by AnyEvent by using
974 [Event::Lib:: => AnyEvent::Impl::EventLib::], # too buggy 982 [Event::Lib:: => AnyEvent::Impl::EventLib::], # too buggy
975 [Qt:: => AnyEvent::Impl::Qt::], # requires special main program 983 [Qt:: => AnyEvent::Impl::Qt::], # requires special main program
976 [POE::Kernel:: => AnyEvent::Impl::POE::], # lasciate ogni speranza 984 [POE::Kernel:: => AnyEvent::Impl::POE::], # lasciate ogni speranza
977 [Wx:: => AnyEvent::Impl::POE::], 985 [Wx:: => AnyEvent::Impl::POE::],
978 [Prima:: => AnyEvent::Impl::POE::], 986 [Prima:: => AnyEvent::Impl::POE::],
987 # IO::Async is just too broken - we would need workaorunds for its
988 # byzantine signal and broken child handling, among others.
989 # IO::Async is rather hard to detect, as it doesn't have any
990 # obvious default class.
991# [IO::Async:: => AnyEvent::Impl::IOAsync::], # requires special main program
992# [IO::Async::Loop:: => AnyEvent::Impl::IOAsync::], # requires special main program
993# [IO::Async::Notifier:: => AnyEvent::Impl::IOAsync::], # requires special main program
979); 994);
980 995
981our %method = map +($_ => 1), 996our %method = map +($_ => 1),
982 qw(io timer time now now_update signal child idle condvar one_event DESTROY); 997 qw(io timer time now now_update signal child idle condvar one_event DESTROY);
983 998
1075} 1090}
1076 1091
1077# utility function to dup a filehandle. this is used by many backends 1092# utility function to dup a filehandle. this is used by many backends
1078# to support binding more than one watcher per filehandle (they usually 1093# to support binding more than one watcher per filehandle (they usually
1079# allow only one watcher per fd, so we dup it to get a different one). 1094# allow only one watcher per fd, so we dup it to get a different one).
1080sub _dupfh($$$$) { 1095sub _dupfh($$;$$) {
1081 my ($poll, $fh, $r, $w) = @_; 1096 my ($poll, $fh, $r, $w) = @_;
1082 1097
1083 # cygwin requires the fh mode to be matching, unix doesn't 1098 # cygwin requires the fh mode to be matching, unix doesn't
1084 my ($rw, $mode) = $poll eq "r" ? ($r, "<") 1099 my ($rw, $mode) = $poll eq "r" ? ($r, "<")
1085 : $poll eq "w" ? ($w, ">") 1100 : $poll eq "w" ? ($w, ">")
1964 1979
1965A handler for C<SIGCHLD> is installed by AnyEvent's child watcher 1980A handler for C<SIGCHLD> is installed by AnyEvent's child watcher
1966emulation for event loops that do not support them natively. Also, some 1981emulation for event loops that do not support them natively. Also, some
1967event loops install a similar handler. 1982event loops install a similar handler.
1968 1983
1984If, when AnyEvent is loaded, SIGCHLD is set to IGNORE, then AnyEvent will
1985reset it to default, to avoid losing child exit statuses.
1986
1969=item SIGPIPE 1987=item SIGPIPE
1970 1988
1971A no-op handler is installed for C<SIGPIPE> when C<$SIG{PIPE}> is C<undef> 1989A no-op handler is installed for C<SIGPIPE> when C<$SIG{PIPE}> is C<undef>
1972when AnyEvent gets loaded. 1990when AnyEvent gets loaded.
1973 1991
1984 2002
1985=back 2003=back
1986 2004
1987=cut 2005=cut
1988 2006
2007undef $SIG{CHLD}
2008 if $SIG{CHLD} eq 'IGNORE';
2009
1989$SIG{PIPE} = sub { } 2010$SIG{PIPE} = sub { }
1990 unless defined $SIG{PIPE}; 2011 unless defined $SIG{PIPE};
1991
1992 2012
1993=head1 FORK 2013=head1 FORK
1994 2014
1995Most event libraries are not fork-safe. The ones who are usually are 2015Most event libraries are not fork-safe. The ones who are usually are
1996because they rely on inefficient but fork-safe C<select> or C<poll> 2016because they rely on inefficient but fork-safe C<select> or C<poll>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines