Akim Demaille <[EMAIL PROTECTED]> writes:
> Would there be a nice solution?
Perhaps the simplest solution would be to ignore that particular
failure. Something like the following, perhaps? (I haven't tested
this, partly because I'm lazy, partly because I don't offhand know the
portability constraints.)
2003-09-25 Paul Eggert <[EMAIL PROTECTED]>
* lib/Autom4te/XFile.pm: Use Errno.
(lock): Ignore ENOLCK errors. Problem reported Andreas Schwab in
<http://mail.gnu.org/archive/html/bug-autoconf/2003-09/msg00141.html>.
--- XFile.pm.~1.8.~ Tue Sep 23 15:44:15 2003
+++ XFile.pm Thu Sep 25 11:10:55 2003
@@ -87,6 +87,7 @@ require 5.000;
use strict;
use vars qw($VERSION @EXPORT @EXPORT_OK $AUTOLOAD @ISA);
use Carp;
+use Errno;
use IO::File;
use File::Basename;
use Autom4te::ChannelDefs;
@@ -216,7 +217,11 @@ sub lock
{
my ($fh, $mode) = @_;
# Cannot use @_ here.
- if (!flock ($fh, $mode))
+ # On some systems (e.g. GNU/Linux with NFSv2), flock(2) does not work over
+ # NFS, but Perl prefers that over fcntl(2) if it exists and if
+ # perl was not built with -Ud_flock. Work around the problem
+ # by ignoring the ENOLCK errors that are reported in that situation.
+ if (!flock ($fh, $mode) && !$!{ENOLCK})
{
my $file = $fh->name;
fatal "cannot lock $file with mode $mode: $!";