diff options
author | Eric Wong <e@80x24.org> | 2023-10-04 03:49:28 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2023-10-04 17:46:44 +0000 |
commit | 4761801ded553ccecc2e4339b0ae32efa8cf6a52 (patch) | |
tree | e126f3cf4da25b7f18a9547c6bb3e4d70c7ac2e2 /lib/PublicInbox/Spawn.pm | |
parent | e279d7556220e7f4963f604a3db1a8bbcb85181f (diff) | |
download | public-inbox-4761801ded553ccecc2e4339b0ae32efa8cf6a52.tar.gz |
It keeps Spawn.pm less noisy and ensures retries on EINTR.
Diffstat (limited to 'lib/PublicInbox/Spawn.pm')
-rw-r--r-- | lib/PublicInbox/Spawn.pm | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/lib/PublicInbox/Spawn.pm b/lib/PublicInbox/Spawn.pm index 75ef0137..0dffe064 100644 --- a/lib/PublicInbox/Spawn.pm +++ b/lib/PublicInbox/Spawn.pm @@ -17,7 +17,8 @@ package PublicInbox::Spawn; use v5.12; use parent qw(Exporter); -use Fcntl qw(LOCK_EX SEEK_SET); +use PublicInbox::Lock; +use Fcntl qw(SEEK_SET); use IO::Handle (); use Carp qw(croak); use PublicInbox::ProcessPipe; @@ -285,26 +286,25 @@ ALL_LIBC $all_libc = undef unless -d _ && -w _; if (defined $all_libc) { local $ENV{PERL_INLINE_DIRECTORY} = $inline_dir; - my $f = "$inline_dir/.public-inbox.lock"; - open my $oldout, '>&', \*STDOUT or die "dup(1): $!"; - open my $olderr, '>&', \*STDERR or die "dup(2): $!"; - open my $fh, '+>', $f or die "open($f): $!"; - open STDOUT, '>&', $fh or die "1>$f: $!"; - open STDERR, '>&', $fh or die "2>$f: $!"; + use autodie; + # CentOS 7.x ships Inline 0.53, 0.64+ has built-in locking + my $lk = PublicInbox::Lock->new($inline_dir. + '/.public-inbox.lock'); + my $fh = $lk->lock_acquire; + open my $oldout, '>&', \*STDOUT; + open my $olderr, '>&', \*STDERR; + open STDOUT, '>&', $fh; + open STDERR, '>&', $fh; STDERR->autoflush(1); STDOUT->autoflush(1); - - # CentOS 7.x ships Inline 0.53, 0.64+ has built-in locking - flock($fh, LOCK_EX) or die "LOCK_EX($f): $!"; - eval <<'EOM'; -use Inline C => $all_libc, BUILD_NOISY => 1; -EOM + CORE::eval 'use Inline C => $all_libc, BUILD_NOISY => 1'; my $err = $@; - open(STDERR, '>&', $olderr) or warn "restore stderr: $!"; - open(STDOUT, '>&', $oldout) or warn "restore stdout: $!"; + open(STDERR, '>&', $olderr); + open(STDOUT, '>&', $oldout); if ($err) { seek($fh, 0, SEEK_SET); my @msg = <$fh>; + truncate($fh, 0); warn "Inline::C build failed:\n", $err, "\n", @msg; $all_libc = undef; } |