about summary refs log tree commit homepage
path: root/lib/PublicInbox/Gcf2.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-10-04 03:49:27 +0000
committerEric Wong <e@80x24.org>2023-10-04 17:46:43 +0000
commite279d7556220e7f4963f604a3db1a8bbcb85181f (patch)
tree7e6ad2f13ef36644ecbbd2b172245a33faf7fef9 /lib/PublicInbox/Gcf2.pm
parentdba2f9999053aa2bbe2682bfe94ceae829f1f59c (diff)
downloadpublic-inbox-e279d7556220e7f4963f604a3db1a8bbcb85181f.tar.gz
It auto-retries on EINTR and saves us the trouble of doing so.
Diffstat (limited to 'lib/PublicInbox/Gcf2.pm')
-rw-r--r--lib/PublicInbox/Gcf2.pm8
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/PublicInbox/Gcf2.pm b/lib/PublicInbox/Gcf2.pm
index 0f4d2bf0..37262e28 100644
--- a/lib/PublicInbox/Gcf2.pm
+++ b/lib/PublicInbox/Gcf2.pm
@@ -6,10 +6,11 @@
 package PublicInbox::Gcf2;
 use v5.12;
 use PublicInbox::Spawn qw(which popen_rd); # may set PERL_INLINE_DIRECTORY
-use Fcntl qw(LOCK_EX SEEK_SET);
+use Fcntl qw(SEEK_SET);
 use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
 use IO::Handle; # autoflush
 use PublicInbox::Git;
+use PublicInbox::Lock;
 
 BEGIN {
         use autodie;
@@ -18,10 +19,10 @@ BEGIN {
         # to ~/.cache/public-inbox/inline-c if it exists and Inline::C works
         my $inline_dir = $ENV{PERL_INLINE_DIRECTORY} //
                 die 'PERL_INLINE_DIRECTORY not defined';
-        open my $fh, '+>', "$inline_dir/.public-inbox.lock";
 
         # CentOS 7.x ships Inline 0.53, 0.64+ has built-in locking
-        flock($fh, LOCK_EX);
+        my $lk = PublicInbox::Lock->new("$inline_dir/.public-inbox.lock");
+        my $fh = $lk->lock_acquire;
 
         my $pc = which($ENV{PKG_CONFIG} // 'pkg-config') //
                 die "pkg-config missing for libgit2";
@@ -74,6 +75,7 @@ EOM
         if ($err) {
                 seek($fh, 0, SEEK_SET);
                 my @msg = <$fh>;
+                truncate($fh, 0);
                 die "Inline::C Gcf2 build failed:\n", $err, "\n", @msg;
         }
 }