]> Sergey Matveev's repositories - public-inbox.git/commitdiff
idx_stack: avoid conditional hash assignment weirdness
authorEric Wong <e@80x24.org>
Mon, 1 Nov 2021 19:06:08 +0000 (19:06 +0000)
committerEric Wong <e@80x24.org>
Mon, 1 Nov 2021 19:49:38 +0000 (19:49 +0000)
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.

lib/PublicInbox/IdxStack.pm

index d51230061ae504323e5a3e2e2128222c6a0d41d6..54d480bdd3710fe8ffa2418c665313d609688d27 100644 (file)
@@ -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);