From: Timo Sirainen Date: Thu, 9 Oct 2014 15:27:14 +0000 (+0300) Subject: lib-index: Added mail_index_sync_no_warning() to prevent "long transaction lock"... X-Git-Tag: 2.2.14~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f6ae4001e33637ad80ebb8f5716ca2020e718625;p=thirdparty%2Fdovecot%2Fcore.git lib-index: Added mail_index_sync_no_warning() to prevent "long transaction lock" warnings. Use it with Maildir to prevent double-warning. --- diff --git a/src/lib-index/mail-index-sync.c b/src/lib-index/mail-index-sync.c index 57aa1a1454..57a24114ab 100644 --- a/src/lib-index/mail-index-sync.c +++ b/src/lib-index/mail-index-sync.c @@ -24,6 +24,8 @@ struct mail_index_sync_ctx { ARRAY(struct mail_index_sync_list) sync_list; uint32_t next_uid; uint32_t last_tail_seq, last_tail_offset; + + unsigned int no_warning:1; }; static void mail_index_sync_add_expunge(struct mail_index_sync_ctx *ctx) @@ -716,6 +718,11 @@ void mail_index_sync_reset(struct mail_index_sync_ctx *ctx) sync_list->idx = 0; } +void mail_index_sync_no_warning(struct mail_index_sync_ctx *ctx) +{ + ctx->no_warning = TRUE; +} + static void mail_index_sync_end(struct mail_index_sync_ctx **_ctx) { struct mail_index_sync_ctx *ctx = *_ctx; @@ -726,7 +733,7 @@ static void mail_index_sync_end(struct mail_index_sync_ctx **_ctx) ctx->index->syncing = FALSE; mail_transaction_log_sync_unlock(ctx->index->log, - "Mailbox was synchronized"); + ctx->no_warning ? NULL : "Mailbox was synchronized"); mail_index_view_close(&ctx->view); mail_index_transaction_rollback(&ctx->sync_trans); diff --git a/src/lib-index/mail-index.h b/src/lib-index/mail-index.h index a279e54326..5ebd39d99a 100644 --- a/src/lib-index/mail-index.h +++ b/src/lib-index/mail-index.h @@ -377,6 +377,10 @@ void mail_index_sync_reset(struct mail_index_sync_ctx *ctx); /* Update result when refreshing index at the end of sync. */ void mail_index_sync_set_commit_result(struct mail_index_sync_ctx *ctx, struct mail_index_transaction_commit_result *result); +/* Don't log a warning even if syncing took over + MAIL_TRANSACTION_LOG_LOCK_WARN_SECS seconds. Usually this is called because + the caller itself already logged a warning about it. */ +void mail_index_sync_no_warning(struct mail_index_sync_ctx *ctx); /* Commit synchronization by writing all changes to mail index file. */ int mail_index_sync_commit(struct mail_index_sync_ctx **ctx); /* Rollback synchronization - none of the changes listed by sync_next() are diff --git a/src/lib-storage/index/maildir/maildir-sync-index.c b/src/lib-storage/index/maildir/maildir-sync-index.c index dc34492918..22070bf7b0 100644 --- a/src/lib-storage/index/maildir/maildir-sync-index.c +++ b/src/lib-storage/index/maildir/maildir-sync-index.c @@ -316,6 +316,7 @@ static int maildir_sync_index_finish(struct maildir_index_sync_context *ctx, mailbox_get_path(&ctx->mbox->box), time_diff, ctx->new_msgs_count, ctx->flag_change_count, ctx->expunge_count); + mail_index_sync_no_warning(ctx->sync_ctx); } if (ret < 0)