dbox-transaction.c revision 687bb904e1bb76c21a6e392f60c990486b298ea4
e59faf65ce864fe95dc00f5d52b8323cdbd0608aTimo Sirainen/* Copyright (C) 2005 Timo Sirainen */
91b203fd2132510a47a4b34252c0ae0efd688a19Timo Sirainenstatic void (*next_hook_mail_index_transaction_created)
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainenstatic int dbox_transaction_commit(struct mail_index_transaction *t,
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen struct dbox_transaction_context *dt = MAIL_STORAGE_TRANSACTION(t);
c040ee67d0ac0fb7375bb543965bf67dcae6affaTimo Sirainen struct dbox_mailbox *dbox = (struct dbox_mailbox *)dt->ictx.ibox;
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen if (dbox_transaction_save_commit_pre(dt->save_ctx) < 0) {
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen if (index_transaction_finish_commit(&dt->ictx, log_file_seq_r,
b039dabf4c53f72454e795930e7643b6e0e625f9Timo Sirainen /* transaction is destroyed now. */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* unlock uidlist file after writing to transaction log,
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen to make sure we don't write uids in wrong order. */
dca6d617a23e3f93af3b8df59acb46478179fe55Timo Sirainenstatic void dbox_transaction_rollback(struct mail_index_transaction *t)
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen struct dbox_transaction_context *dt = MAIL_STORAGE_TRANSACTION(t);
dca6d617a23e3f93af3b8df59acb46478179fe55Timo Sirainenvoid dbox_transaction_created(struct mail_index_transaction *t)
dca6d617a23e3f93af3b8df59acb46478179fe55Timo Sirainen struct mailbox *box = MAIL_STORAGE_INDEX(t->view->index);
dca6d617a23e3f93af3b8df59acb46478179fe55Timo Sirainen if (strcmp(box->storage->name, DBOX_STORAGE_NAME) == 0) {
dca6d617a23e3f93af3b8df59acb46478179fe55Timo Sirainen struct dbox_mailbox *dbox = (struct dbox_mailbox *)box;
dca6d617a23e3f93af3b8df59acb46478179fe55Timo Sirainen mt = i_new(struct dbox_transaction_context, 1);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen array_idx_set(&t->mail_index_transaction_module_contexts,
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen index_transaction_init(&mt->ictx, &dbox->ibox);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen if (next_hook_mail_index_transaction_created != NULL)
dca6d617a23e3f93af3b8df59acb46478179fe55Timo Sirainen hook_mail_index_transaction_created = dbox_transaction_created;