Mercurial > dovecot > core-2.2
changeset 19800:363311913f82
lib-index: Added mail_index_sync_set_reason() to improve lock wait log warnings
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 22 Feb 2016 11:46:13 +0200 |
parents | 8dfbf0629359 |
children | 30573edaa04f |
files | src/lib-index/mail-index-sync.c src/lib-index/mail-index.h |
diffstat | 2 files changed, 22 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-sync.c Mon Feb 22 11:15:52 2016 +0200 +++ b/src/lib-index/mail-index-sync.c Mon Feb 22 11:46:13 2016 +0200 @@ -16,6 +16,7 @@ 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 @@ 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); }
--- a/src/lib-index/mail-index.h Mon Feb 22 11:15:52 2016 +0200 +++ b/src/lib-index/mail-index.h Mon Feb 22 11:46:13 2016 +0200 @@ -386,6 +386,11 @@ 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