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);