49 lines
1.7 KiB
Diff
49 lines
1.7 KiB
Diff
|
diff --git a/cpan/autodie/lib/Fatal.pm b/cpan/autodie/lib/Fatal.pm
|
||
|
old mode 100644
|
||
|
new mode 100755
|
||
|
index 18e71ed..c17a257
|
||
|
--- cpan/autodie/lib/Fatal.pm
|
||
|
+++ cpan/autodie/lib/Fatal.pm
|
||
|
@@ -5,6 +5,7 @@ use Carp;
|
||
|
use strict;
|
||
|
use warnings;
|
||
|
use Tie::RefHash; # To cache subroutine refs
|
||
|
+use Config;
|
||
|
|
||
|
use constant PERL510 => ( $] >= 5.010 );
|
||
|
|
||
|
@@ -52,6 +53,10 @@ our %_EWOULDBLOCK = (
|
||
|
MSWin32 => 33,
|
||
|
);
|
||
|
|
||
|
+# the linux parisc port has separate EAGAIN and EWOULDBLOCK,
|
||
|
+# and the kernel returns EAGAIN
|
||
|
+my $try_EAGAIN = ($^O eq 'linux' and $Config{archname} =~ /hppa|parisc/) ? 1 : 0;
|
||
|
+
|
||
|
# We have some tags that can be passed in for use with import.
|
||
|
# These are all assumed to be CORE::
|
||
|
|
||
|
@@ -720,6 +725,11 @@ sub _one_invocation {
|
||
|
my $EWOULDBLOCK = eval { POSIX::EWOULDBLOCK(); }
|
||
|
|| $_EWOULDBLOCK{$^O}
|
||
|
|| _autocroak("Internal error - can't overload flock - EWOULDBLOCK not defined on this system.");
|
||
|
+ my $EAGAIN = $EWOULDBLOCK;
|
||
|
+ if ($try_EAGAIN) {
|
||
|
+ $EAGAIN = eval { POSIX::EAGAIN(); }
|
||
|
+ || _autocroak("Internal error - can't overload flock - EAGAIN not defined on this system.");
|
||
|
+ }
|
||
|
|
||
|
require Fcntl; # For Fcntl::LOCK_NB
|
||
|
|
||
|
@@ -735,7 +745,9 @@ sub _one_invocation {
|
||
|
# If we failed, but we're using LOCK_NB and
|
||
|
# returned EWOULDBLOCK, it's not a real error.
|
||
|
|
||
|
- if (\$_[1] & Fcntl::LOCK_NB() and \$! == $EWOULDBLOCK ) {
|
||
|
+ if (\$_[1] & Fcntl::LOCK_NB() and
|
||
|
+ (\$! == $EWOULDBLOCK or
|
||
|
+ ($try_EAGAIN and \$! == $EAGAIN ))) {
|
||
|
return \$retval;
|
||
|
}
|
||
|
|