From: Timo Sirainen Date: Sat, 1 Apr 2017 18:54:30 +0000 (+0300) Subject: lib-storage: Add mailbox_transaction_set_reason() X-Git-Tag: 2.2.29.rc1~29 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d28d40b18c2e0105502cd67ac8f8be981fc02f24;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Add mailbox_transaction_set_reason() --- diff --git a/src/lib-storage/index/index-transaction.c b/src/lib-storage/index/index-transaction.c index 0e12d44aaa..142f2a30a2 100644 --- a/src/lib-storage/index/index-transaction.c +++ b/src/lib-storage/index/index-transaction.c @@ -17,6 +17,7 @@ static void index_transaction_free(struct mailbox_transaction_context *t) if (array_is_created(&t->pvt_saves)) array_free(&t->pvt_saves); array_free(&t->module_contexts); + i_free(t->reason); i_free(t); } diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index f2bdb70754..44c28a1712 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -565,6 +565,7 @@ struct mail_save_private_changes { struct mailbox_transaction_context { struct mailbox *box; enum mailbox_transaction_flags flags; + char *reason; union mail_index_transaction_module_context module_ctx; struct mail_index_transaction_vfuncs super; diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 782056fb1d..a2ee8a0b0c 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -2057,6 +2057,15 @@ void mailbox_transaction_rollback(struct mailbox_transaction_context **_t) box->transaction_count--; } +void mailbox_transaction_set_reason(struct mailbox_transaction_context *t, + const char *reason) +{ + i_assert(reason != NULL); + + i_free(t->reason); + t->reason = i_strdup(reason); +} + unsigned int mailbox_transaction_get_count(const struct mailbox *box) { return box->transaction_count; diff --git a/src/lib-storage/mail-storage.h b/src/lib-storage/mail-storage.h index 9935369997..5c8790fa40 100644 --- a/src/lib-storage/mail-storage.h +++ b/src/lib-storage/mail-storage.h @@ -648,6 +648,10 @@ int mailbox_transaction_commit_get_changes( struct mailbox_transaction_context **t, struct mail_transaction_commit_changes *changes_r); void mailbox_transaction_rollback(struct mailbox_transaction_context **t); +/* Set a reason for why the transaction is created. This is used for + logging purposes. */ +void mailbox_transaction_set_reason(struct mailbox_transaction_context *t, + const char *reason); /* Return the number of active transactions for the mailbox. */ unsigned int mailbox_transaction_get_count(const struct mailbox *box) ATTR_PURE; /* When committing transaction, drop flag/keyword updates for messages whose