about summary refs log tree commit homepage
path: root/lib/PublicInbox/ExtSearchIdx.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/ExtSearchIdx.pm')
-rw-r--r--lib/PublicInbox/ExtSearchIdx.pm13
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/PublicInbox/ExtSearchIdx.pm b/lib/PublicInbox/ExtSearchIdx.pm
index cf90c562..d780776f 100644
--- a/lib/PublicInbox/ExtSearchIdx.pm
+++ b/lib/PublicInbox/ExtSearchIdx.pm
@@ -128,14 +128,21 @@ sub do_xpost ($$) {
         my $oid = $req->{oid};
         my $xibx = $req->{ibx};
         my $eml = $req->{eml};
+        my $eidx_key = $xibx->eidx_key;
         if (my $new_smsg = $req->{new_smsg}) { # 'm' on cross-posted message
                 my $xnum = $req->{xnum};
-                $self->{oidx}->add_xref3($docid, $xnum, $oid, $xibx->eidx_key);
+                $self->{oidx}->add_xref3($docid, $xnum, $oid, $eidx_key);
                 $idx->shard_add_eidx_info($docid, $oid, $xibx, $eml);
                 check_batch_limit($req);
         } else { # 'd'
-                $self->{oidx}->remove_xref3($docid, $oid, $xibx->eidx_key);
-                $idx->shard_remove_eidx_info($docid, $oid, $xibx, $eml);
+                my $rm_eidx_info;
+                my $nr = $self->{oidx}->remove_xref3($docid, $oid, $eidx_key,
+                                                        \$rm_eidx_info);
+                if ($nr == 0) {
+                        $idx->shard_remove($oid, $docid);
+                } elsif ($rm_eidx_info) {
+                        $idx->shard_remove_eidx_info($docid, $oid, $xibx, $eml);
+                }
         }
 }