From 5c92541d8f8d9308faeacbd60be34253031d632c Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 13 Jun 2017 22:14:11 +0300 Subject: [PATCH] lib-index: Fix cache lookups from uncommitted transactions with in-memory indexes This especially fixes mail_get_header_stream() with imapc and imapc_features=fetch-headers, because it works by first fetching the specific headers and putting them to the cache transaction, then later on relying on index_mail_get_header_stream() to get them from the transaction. Before this fix they wouldn't be found, which triggered another unnecessary FETCH BODY.PEEK[HEADER]. --- src/lib-index/mail-cache-transaction.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib-index/mail-cache-transaction.c b/src/lib-index/mail-cache-transaction.c index 3c8fd4e30c..61018b3f2c 100644 --- a/src/lib-index/mail-cache-transaction.c +++ b/src/lib-index/mail-cache-transaction.c @@ -289,8 +289,9 @@ mail_cache_transaction_lookup_rec(struct mail_cache_transaction_ctx *ctx, const struct mail_cache_transaction_rec *recs; unsigned int i, count; - if (MAIL_CACHE_IS_UNUSABLE(ctx->cache) || - ctx->cache_file_seq != ctx->cache->hdr->file_seq) { + if (!MAIL_INDEX_IS_IN_MEMORY(ctx->cache->index) && + (MAIL_CACHE_IS_UNUSABLE(ctx->cache) || + ctx->cache_file_seq != ctx->cache->hdr->file_seq)) { /* Cache was compressed during this transaction. We can't safely use the data anymore, since its fields won't match cache->file_fields_map. */