about summary refs log tree commit homepage
path: root/lib/PublicInbox
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-11-15 04:32:39 +0000
committerEric Wong <e@80x24.org>2023-11-15 08:02:57 +0000
commit4bf3fe6a811c6e024af3580f2da15c234fb53011 (patch)
tree6ba664947cc5cbe2cec26e065dff02071b6c706f /lib/PublicInbox
parent7d06b126e9395d96a03b37daf49019925ff0ec76 (diff)
downloadpublic-inbox-4bf3fe6a811c6e024af3580f2da15c234fb53011.tar.gz
Avoid mixing autodie use in different scopes since it's likely
to cause problems like it did in Gcf2.  While none of these
fix known problems with test cases, it's likely worthwhile to
avoid it anyways to avoid future surprises.

For Process::IO, we'll add some additional tests in t/io.t
to ensure we don't get unintended exceptions for try_cat.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r--lib/PublicInbox/IO.pm2
-rw-r--r--lib/PublicInbox/LEI.pm7
-rw-r--r--lib/PublicInbox/TestCommon.pm5
-rw-r--r--lib/PublicInbox/XapHelperCxx.pm18
4 files changed, 15 insertions, 17 deletions
diff --git a/lib/PublicInbox/IO.pm b/lib/PublicInbox/IO.pm
index 11ce9be1..63ae3ef4 100644
--- a/lib/PublicInbox/IO.pm
+++ b/lib/PublicInbox/IO.pm
@@ -9,6 +9,8 @@ use PublicInbox::DS qw(awaitpid);
 our @EXPORT_OK = qw(poll_in read_all try_cat write_file);
 use Carp qw(croak);
 use IO::Poll qw(POLLIN);
+# don't autodie in top-level for Perl 5.16.3 (and maybe newer versions)
+# we have our own ->close, so we scope autodie into each sub
 
 sub waitcb { # awaitpid callback
         my ($pid, $errref, $cb, @args) = @_;
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 69065ce7..460aed40 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -9,7 +9,7 @@ package PublicInbox::LEI;
 use v5.12;
 use parent qw(PublicInbox::DS PublicInbox::LeiExternal
         PublicInbox::LeiQuery);
-use autodie qw(bind chdir fork open socket socketpair syswrite unlink);
+use autodie qw(bind chdir fork open pipe socket socketpair syswrite unlink);
 use Getopt::Long ();
 use Socket qw(AF_UNIX SOCK_SEQPACKET pack_sockaddr_un);
 use Errno qw(EPIPE EAGAIN ECONNREFUSED ENOENT ECONNRESET);
@@ -1099,8 +1099,8 @@ sub start_pager {
         $new_env->{LESS} //= 'FRX';
         $new_env->{LV} //= '-c';
         $new_env->{MORE} = $new_env->{LESS} if $^O eq 'freebsd';
-        pipe(my ($r, $wpager)) or return warn "pipe: $!";
-        my $rdr = { 0 => $r, 1 => $self->{1}, 2 => $self->{2} };
+        my $rdr = { 1 => $self->{1}, 2 => $self->{2} };
+        CORE::pipe($rdr->{0}, my $wpager) or return warn "pipe: $!";
         my $pgr = [ undef, @$rdr{1, 2} ];
         my $env = $self->{env};
         if ($self->{sock}) { # lei(1) process runs it
@@ -1580,7 +1580,6 @@ sub slurp_stdin {
         my $in = $lei->{0};
         if (-t $in) { # run cat via script/lei and read from it
                 $in = undef;
-                use autodie qw(pipe);
                 pipe($in, my $wr);
                 say { $lei->{2} } '# enter query, Ctrl-D when done';
                 send_exec_cmd($lei, [ $lei->{0}, $wr ], ['cat'], {});
diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm
index a5546905..8bfa30f2 100644
--- a/lib/PublicInbox/TestCommon.pm
+++ b/lib/PublicInbox/TestCommon.pm
@@ -16,7 +16,7 @@ our @EXPORT;
 my $lei_loud = $ENV{TEST_LEI_ERR_LOUD};
 my $tail_cmd = $ENV{TAIL};
 our ($lei_opt, $lei_out, $lei_err);
-use autodie qw(chdir close fcntl open opendir seek unlink);
+use autodie qw(chdir close fcntl mkdir open opendir seek unlink);
 
 $_ = File::Spec->rel2abs($_) for (grep(!m!^/!, @INC));
 
@@ -670,7 +670,6 @@ sub test_lei {
 SKIP: {
         my ($cb) = pop @_;
         my $test_opt = shift // {};
-        use autodie qw(mkdir);
         require_git(2.6, 1);
         my $mods = $test_opt->{mods} // [ 'lei' ];
         require_mods(@$mods, 2);
@@ -801,7 +800,7 @@ sub create_coderepo ($$;@) {
         my ($db) = (PublicInbox::Import::default_branch() =~ m!([^/]+)\z!);
         my $dir = "t/data-gen/$base.$ident-$db";
         my $new = !-d $dir;
-        if ($new && !mkdir($dir)) {
+        if ($new && !CORE::mkdir($dir)) {
                 my $err = $!;
                 -d $dir or xbail "mkdir($dir): $err";
         }
diff --git a/lib/PublicInbox/XapHelperCxx.pm b/lib/PublicInbox/XapHelperCxx.pm
index e516b111..1250c964 100644
--- a/lib/PublicInbox/XapHelperCxx.pm
+++ b/lib/PublicInbox/XapHelperCxx.pm
@@ -8,10 +8,11 @@
 package PublicInbox::XapHelperCxx;
 use v5.12;
 use PublicInbox::Spawn qw(run_die run_qx which);
-use PublicInbox::IO qw(read_all write_file);
+use PublicInbox::IO qw(read_all try_cat write_file);
 use PublicInbox::Search;
 use Fcntl qw(SEEK_SET);
 use Config;
+use autodie;
 my $cxx = which($ENV{CXX} // 'c++');
 my $dir = substr("$cxx-$Config{archname}", 1); # drop leading '/'
 $dir =~ tr!/!-!;
@@ -39,25 +40,22 @@ EOM
 }
 
 sub needs_rebuild () {
-        open my $fh, '<', "$dir/XFLAGS" or return 1;
-        chomp(my $prev = read_all($fh));
+        my $prev = try_cat("$dir/XFLAGS") or return 1;
+        chomp $prev;
         return 1 if $prev ne $xflags;
 
-        open $fh, '<', "$dir/xap_modversion" or return 1;
-        chomp($prev = read_all($fh));
-        $prev or return 1;
+        $prev = try_cat("$dir/xap_modversion") or return 1;
+        chomp $prev;
 
         $xap_modversion = xap_cfg('--modversion');
         $xap_modversion ne $prev;
 }
 
 sub build () {
-        if (!-d $dir) {
-                my $err;
-                mkdir($dir) or $err = $!;
+        if (!-d $dir && !CORE::mkdir($dir)) {
+                my $err = $!;
                 die "mkdir($dir): $err" if !-d $dir;
         }
-        use autodie;
         require PublicInbox::CodeSearch;
         require PublicInbox::Lock;
         require PublicInbox::OnDestroy;