From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 02D2E1F573 for ; Wed, 4 Oct 2023 03:49:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1696391376; bh=mmuS1rnlmckBVlsjHt5EHi5UaPhVSUXDN3M+xrAvjmk=; h=From:To:Subject:Date:In-Reply-To:References:From; b=AYRTbW8fFRERUaIM9F+1gOCmlJWKutUYInRiOtg24UDlD8iNtKD1Y9zoDxEgdTYY8 1Xycdeb7T3O57qJl91WWOdf0V/3ltTyiSWzKPnOdssrZ4a52c1FNhjGK9AzN5lvvOu PHI8SEuk3YVPVcaOfmcfqba70Qnw88zgI3CfZ3l0= From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 16/21] spawn: use autodie and PublicInbox::Lock Date: Wed, 4 Oct 2023 03:49:28 +0000 Message-ID: <20231004034933.3343930-17-e@80x24.org> In-Reply-To: <20231004034933.3343930-1-e@80x24.org> References: <20231004034933.3343930-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: It keeps Spawn.pm less noisy and ensures retries on EINTR. --- lib/PublicInbox/Spawn.pm | 30 +++++++++++++++--------------- 1 file 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; }