static struct mailbox_transaction_context *
mail_deliver_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags)
+ enum mailbox_transaction_flags flags,
+ const char *reason)
{
struct mail_deliver_mailbox *mbox = MAIL_DELIVER_STORAGE_CONTEXT(box);
struct mail_deliver_user *muser =
i_assert(muser != NULL);
i_assert(muser->deliver_ctx != NULL);
- t = mbox->module_ctx.super.transaction_begin(box, flags);
+ t = mbox->module_ctx.super.transaction_begin(box, flags, reason);
dt = p_new(muser->deliver_ctx->pool, struct mail_deliver_transaction, 1);
MODULE_CONTEXT_SET(t, mail_deliver_storage_module, dt);
static struct mailbox_transaction_context *
fail_mailbox_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags)
+ enum mailbox_transaction_flags flags,
+ const char *reason ATTR_UNUSED)
{
struct mailbox_transaction_context *ctx;
struct mailbox_transaction_context *
index_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags);
+ enum mailbox_transaction_flags flags,
+ const char *reason);
void index_transaction_init(struct mailbox_transaction_context *t,
struct mailbox *box,
- enum mailbox_transaction_flags flags);
+ enum mailbox_transaction_flags flags,
+ const char *reason);
void index_transaction_init_pvt(struct mailbox_transaction_context *t);
int index_transaction_commit(struct mailbox_transaction_context *t,
struct mail_transaction_commit_changes *changes_r);
void index_transaction_init(struct mailbox_transaction_context *t,
struct mailbox *box,
- enum mailbox_transaction_flags flags)
+ enum mailbox_transaction_flags flags,
+ const char *reason)
{
enum mail_index_transaction_flags itrans_flags;
mail_index_refresh(box->index);
t->box = box;
+ t->reason = i_strdup(reason);
t->itrans = mail_index_transaction_begin(box->view, itrans_flags);
t->view = mail_index_transaction_open_updated_view(t->itrans);
struct mailbox_transaction_context *
index_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags)
+ enum mailbox_transaction_flags flags,
+ const char *reason)
{
struct mailbox_transaction_context *t;
t = i_new(struct mailbox_transaction_context, 1);
- index_transaction_init(t, box, flags);
+ index_transaction_init(t, box, flags, reason);
return t;
}
static struct mailbox_transaction_context *
mbox_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags)
+ enum mailbox_transaction_flags flags,
+ const char *reason)
{
struct mbox_mailbox *mbox = MBOX_MAILBOX(box);
struct mbox_transaction_context *mt;
mbox->external_transactions++;
mt = i_new(struct mbox_transaction_context, 1);
- index_transaction_init(&mt->t, box, flags);
+ index_transaction_init(&mt->t, box, flags, reason);
return &mt->t;
}
struct mailbox_transaction_context *
(*transaction_begin)(struct mailbox *box,
- enum mailbox_transaction_flags flags);
+ enum mailbox_transaction_flags flags,
+ const char *reason);
int (*transaction_commit)(struct mailbox_transaction_context *t,
struct mail_transaction_commit_changes *changes_r);
void (*transaction_rollback)(struct mailbox_transaction_context *t);
(box->flags & MAILBOX_FLAG_USE_STUBS) != 0);
i_assert(box->opened);
- i_assert(reason != NULL);
box->transaction_count++;
- trans = box->v.transaction_begin(box, flags);
- trans->reason = i_strdup(reason);
+ trans = box->v.transaction_begin(box, flags, reason);
+ i_assert(trans->reason != NULL);
trans->flags = flags;
return trans;
}
static struct mailbox_transaction_context *
expire_mailbox_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags)
+ enum mailbox_transaction_flags flags,
+ const char *reason)
{
struct expire_mailbox *xpr_box = EXPIRE_CONTEXT(box);
struct mailbox_transaction_context *t;
struct expire_transaction_context *xt;
- t = xpr_box->module_ctx.super.transaction_begin(box, flags);
+ t = xpr_box->module_ctx.super.transaction_begin(box, flags, reason);
xt = i_new(struct expire_transaction_context, 1);
MODULE_CONTEXT_SET(t, expire_storage_module, xt);
static struct mailbox_transaction_context *
fts_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags)
+ enum mailbox_transaction_flags flags,
+ const char *reason)
{
struct fts_mailbox *fbox = FTS_CONTEXT(box);
struct mailbox_transaction_context *t;
ft = i_new(struct fts_transaction_context, 1);
- t = fbox->module_ctx.super.transaction_begin(box, flags);
+ t = fbox->module_ctx.super.transaction_begin(box, flags, reason);
MODULE_CONTEXT_SET(t, fts_storage_module, ft);
return t;
}
static struct mailbox_transaction_context *
lazy_expunge_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags)
+ enum mailbox_transaction_flags flags,
+ const char *reason)
{
struct lazy_expunge_mail_user *luser =
LAZY_EXPUNGE_USER_CONTEXT(box->list->ns->user);
struct mailbox_transaction_context *t;
struct lazy_expunge_transaction *lt;
- t = mbox->super.transaction_begin(box, flags);
+ t = mbox->super.transaction_begin(box, flags, reason);
lt = i_new(struct lazy_expunge_transaction, 1);
lt->copy_only_last_instance = luser->copy_only_last_instance;
static struct mailbox_transaction_context *
notify_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags)
+ enum mailbox_transaction_flags flags,
+ const char *reason)
{
union mailbox_module_context *lbox = NOTIFY_CONTEXT(box);
struct mailbox_transaction_context *t;
- t = lbox->super.transaction_begin(box, flags);
+ t = lbox->super.transaction_begin(box, flags, reason);
if ((t->flags & MAILBOX_TRANSACTION_FLAG_NO_NOTIFY) == 0)
notify_contexts_mail_transaction_begin(t);
static struct mailbox_transaction_context *
quota_mailbox_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags)
+ enum mailbox_transaction_flags flags,
+ const char *reason)
{
struct quota_mailbox *qbox = QUOTA_CONTEXT(box);
struct mailbox_transaction_context *t;
struct quota_transaction_context *qt;
- t = qbox->module_ctx.super.transaction_begin(box, flags);
+ t = qbox->module_ctx.super.transaction_begin(box, flags, reason);
qt = quota_transaction_begin(box);
qt->sync_transaction = (flags & MAILBOX_TRANSACTION_FLAG_SYNC) != 0;
static struct mailbox_transaction_context *
stats_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags)
+ enum mailbox_transaction_flags flags,
+ const char *reason)
{
struct stats_user *suser = STATS_USER_CONTEXT(box->storage->user);
struct stats_mailbox *sbox = STATS_CONTEXT(box);
struct mailbox_transaction_context *trans;
struct stats_transaction_context *strans;
- trans = sbox->module_ctx.super.transaction_begin(box, flags);
+ trans = sbox->module_ctx.super.transaction_begin(box, flags, reason);
trans->stats_track = TRUE;
strans = i_new(struct stats_transaction_context, 1);
struct mailbox_transaction_context *
virtual_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags)
+ enum mailbox_transaction_flags flags,
+ const char *reason)
{
struct virtual_mailbox *mbox = (struct virtual_mailbox *)box;
struct virtual_transaction_context *vt;
vt = i_new(struct virtual_transaction_context, 1);
i_array_init(&vt->backend_transactions,
array_count(&mbox->backend_boxes));
- index_transaction_init(&vt->t, box, flags);
+ index_transaction_init(&vt->t, box, flags, reason);
return &vt->t;
}
struct mailbox_transaction_context *
virtual_transaction_begin(struct mailbox *box,
- enum mailbox_transaction_flags flags);
+ enum mailbox_transaction_flags flags,
+ const char *reason);
int virtual_transaction_commit(struct mailbox_transaction_context *t,
struct mail_transaction_commit_changes *changes_r);
void virtual_transaction_rollback(struct mailbox_transaction_context *t);