From: Eric Wong <e@80x24.org>
Date: Mon, 1 Nov 2021 19:06:08 +0000 (+0000)
Subject: idx_stack: avoid conditional hash assignment weirdness
X-Git-Tag: v1.7.0~20
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=b46de4da83d797281af9603f350e5b7105845eed;p=public-inbox.git

idx_stack: avoid conditional hash assignment weirdness

I've been seeing the following error on occasion during "make check-run":
$PWD/t/data-gen/reindex-time-range.v1-master index failed: Modification of a read-only value attempted at $DIR/lib/PublicInbox/SearchIdx.pm line 899, <$r> line 1.

Perhaps this fixes it.  In any case, a construct of:

	 $h->{k} //= do { $h->{x} = ...; $val };

seems wrong and may cause Perl to error out depending on how
hashes are randomized.
---

diff --git a/lib/PublicInbox/IdxStack.pm b/lib/PublicInbox/IdxStack.pm
index d5123006..54d480bd 100644
--- a/lib/PublicInbox/IdxStack.pm
+++ b/lib/PublicInbox/IdxStack.pm
@@ -20,12 +20,12 @@ sub new {
 sub push_rec {
 	my ($self, $file_char, $at, $ct, $blob_oid, $cmt_oid) = @_;
 	my $rec = pack(PACK_FMT, $file_char, $at, $ct, $blob_oid, $cmt_oid);
-	$self->{unpack_fmt} //= do {
+	$self->{unpack_fmt} // do {
 		my $len = length($cmt_oid);
 		my $fmt = PACK_FMT;
 		$fmt =~ s/H\*/H$len/g;
 		$self->{rec_size} = length($rec);
-		$fmt;
+		$self->{unpack_fmt} = $fmt;
 	};
 	print { $self->{wr} } $rec or die "print: $!";
 	$self->{tot_size} += length($rec);