… | |
… | |
793 | } |
793 | } |
794 | |
794 | |
795 | sub detect() { |
795 | sub detect() { |
796 | unless ($MODEL) { |
796 | unless ($MODEL) { |
797 | no strict 'refs'; |
797 | no strict 'refs'; |
|
|
798 | local $SIG{__DIE__}; |
798 | |
799 | |
799 | if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z]+)$/) { |
800 | if ($ENV{PERL_ANYEVENT_MODEL} =~ /^([a-zA-Z]+)$/) { |
800 | my $model = "AnyEvent::Impl::$1"; |
801 | my $model = "AnyEvent::Impl::$1"; |
801 | if (eval "require $model") { |
802 | if (eval "require $model") { |
802 | $MODEL = $model; |
803 | $MODEL = $model; |
… | |
… | |
925 | or Carp::croak "required option 'pid' is missing"; |
926 | or Carp::croak "required option 'pid' is missing"; |
926 | |
927 | |
927 | $PID_CB{$pid}{$arg{cb}} = $arg{cb}; |
928 | $PID_CB{$pid}{$arg{cb}} = $arg{cb}; |
928 | |
929 | |
929 | unless ($WNOHANG) { |
930 | unless ($WNOHANG) { |
930 | $WNOHANG = eval { require POSIX; &POSIX::WNOHANG } || 1; |
931 | $WNOHANG = eval { local $SIG{__DIE__}; require POSIX; &POSIX::WNOHANG } || 1; |
931 | } |
932 | } |
932 | |
933 | |
933 | unless ($CHLD_W) { |
934 | unless ($CHLD_W) { |
934 | $CHLD_W = AnyEvent->signal (signal => 'CHLD', cb => \&_sigchld); |
935 | $CHLD_W = AnyEvent->signal (signal => 'CHLD', cb => \&_sigchld); |
935 | # child could be a zombie already, so make at least one round |
936 | # child could be a zombie already, so make at least one round |