--- AnyEvent/lib/AnyEvent.pm 2009/03/27 10:49:50 1.199 +++ AnyEvent/lib/AnyEvent.pm 2009/04/01 14:02:27 1.200 @@ -1072,13 +1072,16 @@ my (undef, %arg) = @_; unless ($SIGPIPE_R) { + require Fcntl; + if (AnyEvent::WIN32) { + require AnyEvent::Util; + ($SIGPIPE_R, $SIGPIPE_W) = AnyEvent::Util::portable_pipe (); AnyEvent::Util::fh_nonblocking ($SIGPIPE_R) if $SIGPIPE_R; AnyEvent::Util::fh_nonblocking ($SIGPIPE_W) if $SIGPIPE_W; # just in case } else { pipe $SIGPIPE_R, $SIGPIPE_W; - require Fcntl; fcntl $SIGPIPE_R, &Fcntl::F_SETFL, &Fcntl::O_NONBLOCK if $SIGPIPE_R; fcntl $SIGPIPE_W, &Fcntl::F_SETFL, &Fcntl::O_NONBLOCK if $SIGPIPE_W; # just in case } @@ -1086,6 +1089,9 @@ $SIGPIPE_R or Carp::croak "AnyEvent: unable to create a signal reporting pipe: $!\n"; + fcntl $SIGPIPE_R, &Fcntl::F_SETFD, &Fcntl::FD_CLOEXEC; + fcntl $SIGPIPE_W, &Fcntl::F_SETFD, &Fcntl::FD_CLOEXEC; + $SIG_IO = AnyEvent->io (fh => $SIGPIPE_R, poll => "r", cb => \&_signal_exec); }