From c7378b542c872eb2fd5aae2080507ec1b312c8e8 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Wed, 25 Jan 2017 23:26:35 +0200 Subject: [PATCH] lib-storage: Expunging now uses GUID only if it's in cache. Otherwise the GUID lookup may be expensive, which is especially bad when deleting a large number of mails. --- src/lib-storage/index/index-mail.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib-storage/index/index-mail.c b/src/lib-storage/index/index-mail.c index 2cd617e714..ade17d9ccf 100644 --- a/src/lib-storage/index/index-mail.c +++ b/src/lib-storage/index/index-mail.c @@ -2161,9 +2161,11 @@ void index_mail_update_pvt_modseq(struct mail *mail, uint64_t min_pvt_modseq) void index_mail_expunge(struct mail *mail) { + enum mail_lookup_abort old_abort = mail->lookup_abort; const char *value; guid_128_t guid_128; + mail->lookup_abort = MAIL_LOOKUP_ABORT_NOT_IN_CACHE; if (mail_get_special(mail, MAIL_FETCH_GUID, &value) < 0) mail_index_expunge(mail->transaction->itrans, mail->seq); else { @@ -2171,6 +2173,7 @@ void index_mail_expunge(struct mail *mail) mail_index_expunge_guid(mail->transaction->itrans, mail->seq, guid_128); } + mail->lookup_abort = old_abort; } static void index_mail_parse(struct mail *mail, bool parse_body) -- 2.47.3