* [PATCH] git: return upon self->close
@ 2023-11-20 8:46 6% Eric Wong
0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2023-11-20 8:46 UTC (permalink / raw)
To: meta
I encountered the odd lack of `return' while chasing Gcf2 bugs
on CentOS 7.x which resulted in commit 7d06b126e939
("gcf2: fix autodie usage for older Perl") and commit e618c7654794
("gcf2client: add alias for PublicInbox::Git::fail") before
realizing the lack of `return' here wasn't the culprit behind
failures on CentOS 7.x.
However, the use of a `return' here appears required in case we
actually hit the error path, since falling through and
attempting my_readline with an undefined filehandle is always a
failure.
Fixes: e97a30e7624d ("lei: fix SIGPIPE on large result sets to pager")
---
lib/PublicInbox/Git.pm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm
index 292c359a..bef524aa 100644
--- a/lib/PublicInbox/Git.pm
+++ b/lib/PublicInbox/Git.pm
@@ -276,7 +276,7 @@ sub cat_async_step ($$) {
sub cat_async_wait ($) {
my ($self) = @_;
- $self->close if !$self->{sock};
+ return $self->close if !$self->{sock};
my $inflight = $self->{inflight} or return;
while (scalar(@$inflight)) {
cat_async_step($self, $inflight);
@@ -332,7 +332,7 @@ sub check_async_wait ($) {
my ($self) = @_;
return cat_async_wait($self) if $self->{-bc};
my $ck = $self->{ck} or return;
- $ck->close if !$ck->{sock};
+ return $ck->close if !$ck->{sock};
my $inflight = $ck->{inflight} or return;
check_async_step($ck, $inflight) while (scalar(@$inflight));
}
^ permalink raw reply related [relevance 6%]
* [PATCH 0/3] libgit2 fixes for CentOS 7.x users
@ 2023-11-15 4:32 7% Eric Wong
2023-11-15 4:32 6% ` [PATCH 2/3] gcf2: fix autodie usage for older Perl Eric Wong
0 siblings, 1 reply; 3+ results
From: Eric Wong @ 2023-11-15 4:32 UTC (permalink / raw)
To: meta
These only spring up with libgit2-devel installed, but
3/3 seems important for all users of older Perl in
order to avoid future surprises.
Eric Wong (3):
gcf2client: add alias for PublicInbox::Git::fail
gcf2: fix autodie usage for older Perl
treewide: more autodie safety fixes for older Perl
lib/PublicInbox/Gcf2.pm | 13 ++++++-------
lib/PublicInbox/Gcf2Client.pm | 1 +
lib/PublicInbox/IO.pm | 2 ++
lib/PublicInbox/LEI.pm | 7 +++----
lib/PublicInbox/TestCommon.pm | 5 ++---
lib/PublicInbox/XapHelperCxx.pm | 18 ++++++++----------
t/extsearch.t | 3 +--
t/io.t | 10 +++++++++-
8 files changed, 32 insertions(+), 27 deletions(-)
^ permalink raw reply [relevance 7%]
* [PATCH 2/3] gcf2: fix autodie usage for older Perl
2023-11-15 4:32 7% [PATCH 0/3] libgit2 fixes for CentOS 7.x users Eric Wong
@ 2023-11-15 4:32 6% ` Eric Wong
0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2023-11-15 4:32 UTC (permalink / raw)
To: meta
At least on Perl v5.16.3 on CentOS 7.x, use-ing autodie within
BEGIN {} affects all subroutines in that package, too. So just
use autodie at the top-level and rely on CORE::* and try_cat
to handle cases where autodie isn't desired.
---
lib/PublicInbox/Gcf2.pm | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/lib/PublicInbox/Gcf2.pm b/lib/PublicInbox/Gcf2.pm
index e0219b55..dcbb201d 100644
--- a/lib/PublicInbox/Gcf2.pm
+++ b/lib/PublicInbox/Gcf2.pm
@@ -11,10 +11,9 @@ use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
use IO::Handle; # autoflush
use PublicInbox::Git;
use PublicInbox::Lock;
-use autodie qw(close);
+use autodie qw(close open seek truncate);
BEGIN {
- use autodie;
my (%CFG, $c_src);
# PublicInbox::Spawn will set PERL_INLINE_DIRECTORY
# to ~/.cache/public-inbox/inline-c if it exists and Inline::C works
@@ -80,9 +79,8 @@ sub add_alt ($$) {
# to refer to $V2INBOX_DIR/git/$EPOCH.git/objects
#
# See https://bugs.debian.org/975607
- if (open(my $fh, '<', "$objdir/info/alternates")) {
- chomp(my @abs_alt = grep m!^/!, PublicInbox::IO::read_all $fh);
- $gcf2->add_alternate($_) for @abs_alt;
+ if (my $s = PublicInbox::IO::try_cat("$objdir/info/alternates")) {
+ $gcf2->add_alternate($_) for ($s =~ m!^(/[^\n]+)\n!gms);
}
$gcf2->add_alternate($objdir);
1;
@@ -92,8 +90,9 @@ sub have_unlinked_files () {
# FIXME: port gcf2-like over to git.git so we won't need to
# deal with libgit2
return 1 if $^O ne 'linux';
- open my $fh, '<', "/proc/$$/maps" or return;
- while (<$fh>) { return 1 if /\.(?:idx|pack) \(deleted\)$/ }
+ if (my $s = PublicInbox::IO::try_cat("/proc/$$/maps")) {
+ return 1 if /\.(?:idx|pack) \(deleted\)/s;
+ }
undef;
}
^ permalink raw reply related [relevance 6%]
Results 1-3 of 3 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2023-11-15 4:32 7% [PATCH 0/3] libgit2 fixes for CentOS 7.x users Eric Wong
2023-11-15 4:32 6% ` [PATCH 2/3] gcf2: fix autodie usage for older Perl Eric Wong
2023-11-20 8:46 6% [PATCH] git: return upon self->close Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).