# HG changeset patch # User Timo Sirainen # Date 1456134373 -7200 # Node ID 363311913f82ae0516297d3ece0f49d8c911f68a # Parent 8dfbf0629359fe4abfb526720b9ef008a3b88a5a lib-index: Added mail_index_sync_set_reason() to improve lock wait log warnings diff -r 8dfbf0629359 -r 363311913f82 src/lib-index/mail-index-sync.c --- 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); } diff -r 8dfbf0629359 -r 363311913f82 src/lib-index/mail-index.h --- 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