From: Timo Sirainen Date: Tue, 13 Jun 2017 19:14:11 +0000 (+0300) Subject: lib-index: Fix cache lookups from uncommitted transactions with in-memory indexes X-Git-Tag: 2.3.0.rc1~1416 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3da9825732c865b8ea11ea070e5b6f881ffae424;p=thirdparty%2Fdovecot%2Fcore.git 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]. --- diff --git a/src/lib-index/mail-cache-transaction.c b/src/lib-index/mail-cache-transaction.c index c582241fe8..6fa2727baa 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. */