cydir-transaction.c revision 398d66217c5916b14485714954c14cf8af0c8547
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen/* Copyright (c) 2007-2009 Dovecot authors, see the included COPYING file */
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainenstatic void (*next_hook_mail_index_transaction_created)
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainenstatic int cydir_transaction_commit(struct mail_index_transaction *t,
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen struct cydir_transaction_context *dt = MAIL_STORAGE_CONTEXT(t);
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen if (cydir_transaction_save_commit_pre(dt->save_ctx) < 0) {
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen if (index_transaction_finish_commit(&dt->ictx, log_file_seq_r,
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen /* transaction is destroyed now. */
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen /* unlock uidlist file after writing to transaction log,
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen to make sure we don't write uids in wrong order. */
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainenstatic void cydir_transaction_rollback(struct mail_index_transaction *t)
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen struct cydir_transaction_context *dt = MAIL_STORAGE_CONTEXT(t);
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen cydir_transaction_save_rollback(dt->save_ctx);
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainenstatic void cydir_transaction_created(struct mail_index_transaction *t)
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen struct mailbox *box = MAIL_STORAGE_CONTEXT(t->view);
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen /* index can be for mailbox list index, in which case box=NULL */
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen strcmp(box->storage->name, CYDIR_STORAGE_NAME) == 0) {
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen struct cydir_mailbox *cydir = (struct cydir_mailbox *)box;
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen mt = i_new(struct cydir_transaction_context, 1);
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen index_transaction_init(&mt->ictx, &cydir->ibox);
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen MODULE_CONTEXT_SET(t, mail_storage_mail_index_module, mt);
854b4074ac77a138b3983d72510b4d8779d15040Timo Sirainen if (next_hook_mail_index_transaction_created != NULL)
decdff03c32cb5d0e99d71c5678fd008714de70bTimo Sirainen hook_mail_index_transaction_created = cydir_transaction_created;