changeset 21879:313601eae9a8

lib-storage: Add mailbox_transaction_set_reason()
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sat, 01 Apr 2017 21:54:30 +0300
parents e78a42ead488
children 8bb7ebb65d0f
files src/lib-storage/index/index-transaction.c src/lib-storage/mail-storage-private.h src/lib-storage/mail-storage.c src/lib-storage/mail-storage.h
diffstat 4 files changed, 15 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/index-transaction.c	Sat Apr 01 21:43:16 2017 +0300
+++ b/src/lib-storage/index/index-transaction.c	Sat Apr 01 21:54:30 2017 +0300
@@ -17,6 +17,7 @@
 	if (array_is_created(&t->pvt_saves))
 		array_free(&t->pvt_saves);
 	array_free(&t->module_contexts);
+	i_free(t->reason);
 	i_free(t);
 }
 
--- a/src/lib-storage/mail-storage-private.h	Sat Apr 01 21:43:16 2017 +0300
+++ b/src/lib-storage/mail-storage-private.h	Sat Apr 01 21:54:30 2017 +0300
@@ -565,6 +565,7 @@
 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;
--- a/src/lib-storage/mail-storage.c	Sat Apr 01 21:43:16 2017 +0300
+++ b/src/lib-storage/mail-storage.c	Sat Apr 01 21:54:30 2017 +0300
@@ -2057,6 +2057,15 @@
 	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;
--- a/src/lib-storage/mail-storage.h	Sat Apr 01 21:43:16 2017 +0300
+++ b/src/lib-storage/mail-storage.h	Sat Apr 01 21:54:30 2017 +0300
@@ -648,6 +648,10 @@
 	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