From: Timo Sirainen Date: Mon, 22 Feb 2016 09:46:13 +0000 (+0200) Subject: lib-index: Added mail_index_sync_set_reason() to improve lock wait log warnings X-Git-Tag: 2.2.22.rc1~120 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5bced341c27719fe5ec48e1cd079843f33c6d4b5;p=thirdparty%2Fdovecot%2Fcore.git lib-index: Added mail_index_sync_set_reason() to improve lock wait log warnings --- diff --git a/src/lib-index/mail-index-sync.c b/src/lib-index/mail-index-sync.c index 023e54fa1c..34a9c78c6b 100644 --- a/src/lib-index/mail-index-sync.c +++ b/src/lib-index/mail-index-sync.c @@ -16,6 +16,7 @@ struct mail_index_sync_ctx { struct mail_index_transaction *sync_trans, *ext_trans; struct mail_index_transaction_commit_result *sync_commit_result; enum mail_index_sync_flags flags; + char *reason; const struct mail_transaction_header *hdr; const void *data; @@ -732,22 +733,36 @@ void mail_index_sync_no_warning(struct mail_index_sync_ctx *ctx) ctx->no_warning = TRUE; } +void mail_index_sync_set_reason(struct mail_index_sync_ctx *ctx, + const char *reason) +{ + i_free(ctx->reason); + ctx->reason = i_strdup(reason); +} + static void mail_index_sync_end(struct mail_index_sync_ctx **_ctx) { struct mail_index_sync_ctx *ctx = *_ctx; + const char *lock_reason; i_assert(ctx->index->syncing); *_ctx = NULL; ctx->index->syncing = FALSE; - mail_transaction_log_sync_unlock(ctx->index->log, - ctx->no_warning ? NULL : "Mailbox was synchronized"); + if (ctx->no_warning) + lock_reason = NULL; + else if (ctx->reason != NULL) + lock_reason = ctx->reason; + else + lock_reason = "Mailbox was synchronized"; + mail_transaction_log_sync_unlock(ctx->index->log, lock_reason); mail_index_view_close(&ctx->view); mail_index_transaction_rollback(&ctx->sync_trans); if (array_is_created(&ctx->sync_list)) array_free(&ctx->sync_list); + i_free(ctx->reason); i_free(ctx); } diff --git a/src/lib-index/mail-index.h b/src/lib-index/mail-index.h index a5ed11fcbc..bf4620db0e 100644 --- a/src/lib-index/mail-index.h +++ b/src/lib-index/mail-index.h @@ -386,6 +386,11 @@ void mail_index_sync_set_commit_result(struct mail_index_sync_ctx *ctx, 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); +/* If a warning is logged because syncing took over + MAIL_TRANSACTION_LOG_LOCK_WARN_SECS seconds, log this as the reason for the + syncing. */ +void mail_index_sync_set_reason(struct mail_index_sync_ctx *ctx, + const char *reason); /* 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