user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [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).