my ($self, $mid, $ref) = @_;
my $srch = search($self) or
return msg_by_path($self, mid2path($mid), $ref);
- my $smsg = $srch->lookup_skeleton($mid) or return;
- $smsg->load_expand;
- msg_by_smsg($self, $smsg, $ref);
+ my $smsg;
+ $srch->retry_reopen(sub {
+ $smsg = $srch->lookup_skeleton($mid) and $smsg->load_expand;
+ });
+ $smsg ? msg_by_smsg($self, $smsg, $ref) : undef;
}
1;
sub get_thread {
my ($self, $mid, $opts) = @_;
- my $smsg = eval { $self->lookup_skeleton($mid) };
+ my $smsg = retry_reopen($self, sub { lookup_skeleton($self, $mid) });
return { total => 0, msgs => [] } unless $smsg;
my $qtid = Search::Xapian::Query->new('G' . $smsg->thread_id);
if (ref($@) eq 'Search::Xapian::DatabaseModifiedError') {
reopen($self);
} else {
+ warn "ref: ", ref($@), "\n";
die;
}
}