From 13d21e1701fe5ff07b1f8017ba54f92965ac1c7a Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 11 Nov 2023 09:04:56 +0000 Subject: 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. --- script/public-inbox-learn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'script') diff --git a/script/public-inbox-learn b/script/public-inbox-learn index 54d31cb6..8069d919 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}); } } -- cgit v1.2.3-24-ge0c7