From: Timo Sirainen Date: Fri, 27 Mar 2020 10:53:32 +0000 (+0200) Subject: lib-index: mail_cache_compress() - Keep the .log file locked during compression X-Git-Tag: 2.3.11.2~412 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=697683734e60614718e58f90eb73a6a3ebc6b0e4;p=thirdparty%2Fdovecot%2Fcore.git lib-index: mail_cache_compress() - Keep the .log file locked during compression --- diff --git a/src/lib-index/mail-cache-compress.c b/src/lib-index/mail-cache-compress.c index 064ecad2e8..e260f636b4 100644 --- a/src/lib-index/mail-cache-compress.c +++ b/src/lib-index/mail-cache-compress.c @@ -577,8 +577,20 @@ int mail_cache_compress(struct mail_cache *cache, uint32_t compress_file_seq) struct mail_index_view *view; struct mail_index_transaction *trans; struct mail_cache_compress_lock *lock; + bool lock_log; int ret; + lock_log = !cache->index->log_sync_locked; + if (lock_log) { + uint32_t file_seq; + uoff_t file_offset; + + if (mail_transaction_log_sync_lock(cache->index->log, + "mail cache compress", + &file_seq, &file_offset) < 0) + return -1; + } + view = mail_index_view_open(cache->index); trans = mail_index_transaction_begin(view, MAIL_INDEX_TRANSACTION_FLAG_EXTERNAL); @@ -590,6 +602,10 @@ int mail_cache_compress(struct mail_cache *cache, uint32_t compress_file_seq) mail_cache_compress_unlock(&lock); } mail_index_view_close(&view); + if (lock_log) { + mail_transaction_log_sync_unlock(cache->index->log, + "mail cache compress"); + } return ret; }