From: Timo Sirainen Date: Mon, 30 Mar 2020 14:39:46 +0000 (+0300) Subject: lib-index: Replace mail_cache_flush_and_unlock() with mail_cache_unlock() where it... X-Git-Tag: 2.3.11.2~388 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6406f1ae46618ca4117516e3cc841ee541a87806;p=thirdparty%2Fdovecot%2Fcore.git lib-index: Replace mail_cache_flush_and_unlock() with mail_cache_unlock() where it's better In various error handling code paths it's not useful to try to flush any headers. It might just make things worse. --- diff --git a/src/lib-index/mail-cache-compress.c b/src/lib-index/mail-cache-compress.c index 3f0a9d6ccb..127059251e 100644 --- a/src/lib-index/mail-cache-compress.c +++ b/src/lib-index/mail-cache-compress.c @@ -366,7 +366,7 @@ mail_cache_compress_write(struct mail_cache *cache, array_free(&ext_offsets); if (*unlock) { - (void)mail_cache_flush_and_unlock(cache); + mail_cache_unlock(cache); *unlock = FALSE; } @@ -435,7 +435,7 @@ static int mail_cache_compress_locked(struct mail_cache *cache, cache->need_compress_file_seq = 0; if (*unlock) { - (void)mail_cache_flush_and_unlock(cache); + (void)mail_cache_unlock(cache); *unlock = FALSE; } @@ -510,10 +510,9 @@ mail_cache_compress_full(struct mail_cache *cache, cache->compressing = TRUE; ret = mail_cache_compress_locked(cache, compress_file_seq, trans, &unlock); cache->compressing = FALSE; - if (unlock) { - if (mail_cache_flush_and_unlock(cache) < 0) - ret = -1; - } + if (unlock) + mail_cache_unlock(cache); + i_assert(!cache->hdr_modified); if (ret < 0) { /* the fields may have been updated in memory already. reverse those changes by re-reading them from file. */ diff --git a/src/lib-index/mail-cache-fields.c b/src/lib-index/mail-cache-fields.c index dc2e753d86..1d1f4b2d0e 100644 --- a/src/lib-index/mail-cache-fields.c +++ b/src/lib-index/mail-cache-fields.c @@ -563,8 +563,8 @@ int mail_cache_header_fields_update(struct mail_cache *cache) T_BEGIN { ret = mail_cache_header_fields_update_locked(cache); } T_END; - if (mail_cache_flush_and_unlock(cache) < 0) - ret = -1; + i_assert(!cache->hdr_modified); + mail_cache_unlock(cache); return ret; } diff --git a/src/lib-index/mail-cache-transaction.c b/src/lib-index/mail-cache-transaction.c index 4734fb3fd9..7e1457fd6a 100644 --- a/src/lib-index/mail-cache-transaction.c +++ b/src/lib-index/mail-cache-transaction.c @@ -220,7 +220,7 @@ static int mail_cache_transaction_lock(struct mail_cache_transaction_ctx *ctx) it to free up some space. */ if (cache->hdr->continued_record_count > 0 || cache->hdr->deleted_record_count > 0) { - (void)mail_cache_flush_and_unlock(cache); + mail_cache_unlock(cache); (void)mail_cache_transaction_compress(ctx); return mail_cache_transaction_lock(ctx); } @@ -469,7 +469,7 @@ mail_cache_transaction_flush(struct mail_cache_transaction_ctx *ctx) i_assert(ctx->last_rec_pos <= ctx->cache_data->used); if (mail_cache_transaction_update_fields(ctx) < 0) { - (void)mail_cache_flush_and_unlock(ctx->cache); + mail_cache_unlock(ctx->cache); return -1; } diff --git a/src/lib-index/mail-cache.c b/src/lib-index/mail-cache.c index f69b0ae958..0aa9c0e1d8 100644 --- a/src/lib-index/mail-cache.c +++ b/src/lib-index/mail-cache.c @@ -823,7 +823,7 @@ mail_cache_lock_full(struct mail_cache *cache, bool nonblock) if (cache->read_buf != NULL) buffer_set_used_size(cache->read_buf, 0); if ((ret = mail_cache_map_all(cache)) <= 0) { - (void)mail_cache_flush_and_unlock(cache); + mail_cache_unlock(cache); return ret; } cache->hdr_copy = *cache->hdr;