From: David Mitchell Date: Thu, 16 Jun 2011 11:44:38 +0000 (+0100) Subject: revert recent changes to eintr.t X-Git-Tag: accepted/trunk/20130322.191538~3704 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1d0853ff6185fc3afa05d46bbcf0889abd10adec;p=platform%2Fupstream%2Fperl.git revert recent changes to eintr.t Revert "[perl #92828] eintr.t hangs on FreeBSD" This reverts commit 6e59d93aee950461947904b4f24a7f52c6c85f58. Revert "eintr.t: skip based on capability rather than OS" This reverts commit df375c6d048b938ecdeaecc7b264a7f1a190120a. My attempt to skip based on capability hung freebsd, and my attempt to fix that failed. Give up for now. --- diff --git a/t/io/eintr.t b/t/io/eintr.t index a36b427..e545228 100644 --- a/t/io/eintr.t +++ b/t/io/eintr.t @@ -40,73 +40,23 @@ if (exists $ENV{PERLIO} && $ENV{PERLIO} =~ /stdio/ ) { exit 0; } -# Determine whether this platform seems to support interruptible syscalls. -# # on Win32, alarm() won't interrupt the read/write call. # Similar issues with VMS. # On FreeBSD, writes to pipes of 8192 bytes or more use a mechanism # that is not interruptible (see perl #85842 and #84688). # "close during print" also hangs on Solaris 8 (but not 10 or 11). - -{ - my $pipe; - note("checking for read interruptibility..."); - my $pid = eval { open($pipe, '-|') }; - unless (defined $pid) { - skip_all("can't do -| open"); - exit 0; - } - unless ($pid) { - #child - sleep 3; - close $pipe; - exit 0; - } - - # parent - - my $intr = 0; - $SIG{ALRM} = sub { $intr = 1 }; - alarm(1); - - my $x = <$pipe>; - - unless ($intr) { - skip_all("reads aren't interruptible"); - exit 0; - } - alarm(0); - - $SIG{PIPE} = 'IGNORE'; - - note("checking for write interruptibility..."); - $pid = eval { open($pipe, '|-') }; - unless (defined $pid) { - skip_all("can't do |- open"); - exit 0; - } - unless ($pid) { - #child - sleep 3; - close $pipe; - exit 0; - } - - # parent - - $intr = 0; - my $buf = "a" x 1_000_000 . "\n"; # bigger than any pipe buffer hopefully - alarm(1); - $x = print $pipe $buf; - - unless ($intr) { - skip_all("writes aren't interruptible"); - exit 0; - } - alarm(0); +# +# Also skip on release builds, to avoid other possibly problematic +# platforms + +if ($^O eq 'VMS' || $^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'freebsd' || + ($^O eq 'solaris' && $Config{osvers} eq '2.8') + || ((int($]*1000) & 1) == 0) +) { + skip_all('various portability issues'); + exit 0; } - my ($in, $out, $st, $sigst, $buf); plan(tests => 10);