if (array_is_created(&t->pvt_saves))
array_free(&t->pvt_saves);
array_free(&t->module_contexts);
+ i_free(t->reason);
i_free(t);
}
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;
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;
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