From: Eric Wong Date: Sat, 11 Nov 2023 09:04:56 +0000 (+0000) Subject: learn: fix redundant ham import on dual matches X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13d21e1701fe5ff07b1f8017ba54f92965ac1c7a;p=thirdparty%2Fpublic-inbox.git learn: fix redundant ham import on dual matches When learning and injecting new messages ham, we want to avoid wasting cycles importing the same message into an inbox twice (once for the To/Cc match and once for the List-Id match). Our existing %seen hash turned out to be ineffective since PublicInbox::Inbox refs get re-blessed to PublicInbox::InboxWritable. So we stop letting class name influence the hash key for tracking by using the reference address instead. We can get the reference address by performing an arithmetic operation (+ 0) instead of having to pay the cost of importing Scalar::Util::refaddr. --- diff --git a/script/public-inbox-learn b/script/public-inbox-learn index 54d31cb65..8069d9190 100755 --- a/script/public-inbox-learn +++ b/script/public-inbox-learn @@ -110,12 +110,12 @@ if ($train eq 'spam' || ($train eq 'rm' && $opt{all})) { my %seen; while (my ($addr, $ibx) = each %dests) { next unless ref($ibx); # $ibx may be 0 - next if $seen{"$ibx"}++; + next if $seen{0 + $ibx}++; remove_or_add($ibx, $train, $mime, $addr); } my $dests = PublicInbox::MDA->inboxes_for_list_id($pi_cfg, $mime); for my $ibx (@$dests) { - next if $seen{"$ibx"}++; + next if $seen{0 + $ibx}++; remove_or_add($ibx, $train, $mime, $ibx->{-primary_address}); } }