mirror of
https://git.yoctoproject.org/poky
synced 2026-09-13 00:49:33 +02:00
And changed the perl tarball URL to more stable cpan location. (From OE-Core rev: 3a08c401f298095840a2aee9079845f5ff434410) Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
101 lines
3.3 KiB
Diff
101 lines
3.3 KiB
Diff
Upstream-Status:Inappropriate [debian patch]
|
|
|
|
From: Niko Tyni <ntyni@debian.org>
|
|
Subject: Allow for flock returning EAGAIN instead of EWOULDBLOCK on linux/parisc
|
|
Bug-Debian: http://bugs.debian.org/543731
|
|
Origin: upstream, http://github.com/pfenwick/autodie/commit/037738e11a6097734b0e1dabdd77b92e5fe35219
|
|
|
|
|
|
---
|
|
cpan/autodie/lib/Fatal.pm | 14 +++++++++++++-
|
|
cpan/autodie/t/flock.t | 12 ++++++++++--
|
|
2 files changed, 23 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/cpan/autodie/lib/Fatal.pm b/cpan/autodie/lib/Fatal.pm
|
|
old mode 100644
|
|
new mode 100755
|
|
index 18e71ed..c17a257
|
|
--- a/cpan/autodie/lib/Fatal.pm
|
|
+++ b/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;
|
|
}
|
|
|
|
diff --git a/cpan/autodie/t/flock.t b/cpan/autodie/t/flock.t
|
|
index a7550ba..6421a56 100755
|
|
--- a/cpan/autodie/t/flock.t
|
|
+++ b/cpan/autodie/t/flock.t
|
|
@@ -2,7 +2,8 @@
|
|
use strict;
|
|
use Test::More;
|
|
use Fcntl qw(:flock);
|
|
-use POSIX qw(EWOULDBLOCK);
|
|
+use POSIX qw(EWOULDBLOCK EAGAIN);
|
|
+use Config;
|
|
|
|
require Fatal;
|
|
|
|
@@ -10,6 +11,9 @@ my $EWOULDBLOCK = eval { EWOULDBLOCK() }
|
|
|| $Fatal::_EWOULDBLOCK{$^O}
|
|
|| plan skip_all => "EWOULDBLOCK not defined on this system";
|
|
|
|
+my $try_EAGAIN = ($^O eq 'linux' and $Config{archname} =~ /hppa|parisc/) ? 1 : 0;
|
|
+my $EAGAIN = eval { EAGAIN() };
|
|
+
|
|
my ($self_fh, $self_fh2);
|
|
|
|
eval {
|
|
@@ -55,7 +59,11 @@ eval {
|
|
$return = flock($self_fh2, LOCK_EX | LOCK_NB);
|
|
};
|
|
|
|
-is($!+0, $EWOULDBLOCK, "Double-flocking should be EWOULDBLOCK");
|
|
+if (!$try_EAGAIN) {
|
|
+ is($!+0, $EWOULDBLOCK, "Double-flocking should be EWOULDBLOCK");
|
|
+} else {
|
|
+ ok($!+0 == $EWOULDBLOCK || $!+0 == $EAGAIN, "Double-flocking should be EWOULDBLOCK or EAGAIN");
|
|
+}
|
|
ok(!$return, "flocking a file twice should fail");
|
|
is($@, "", "Non-blocking flock should not fail on EWOULDBLOCK");
|
|
|
|
--
|
|
tg: (a508b62..) fixes/autodie-flock (depends on: upstream)
|