for (ctx = ctx_list; ctx != NULL; ctx = ctx->next) {
mail_txn = i_new(struct notify_mail_txn, 1);
mail_txn->parent_mailbox_txn = t;
- mail_txn->txn = ctx->v.mail_transaction_begin(t);
+ mail_txn->txn = ctx->v.mail_transaction_begin == NULL ? NULL :
+ ctx->v.mail_transaction_begin(t);
DLLIST_PREPEND(&ctx->mail_txn_list, mail_txn);
}
}
struct notify_mail_txn *mail_txn;
for (ctx = ctx_list; ctx != NULL; ctx = ctx->next) {
+ if (ctx->v.mail_save == NULL)
+ continue;
mail_txn = notify_context_find_mail_txn(ctx, mail->transaction);
ctx->v.mail_save(mail_txn->txn, mail);
}
struct notify_mail_txn *mail_txn;
for (ctx = ctx_list; ctx != NULL; ctx = ctx->next) {
+ if (ctx->v.mail_copy == NULL)
+ continue;
mail_txn = notify_context_find_mail_txn(ctx, dst->transaction);
ctx->v.mail_copy(mail_txn->txn, src, dst);
}
struct notify_mail_txn *mail_txn;
for (ctx = ctx_list; ctx != NULL; ctx = ctx->next) {
+ if (ctx->v.mail_expunge == NULL)
+ continue;
mail_txn = notify_context_find_mail_txn(ctx, mail->transaction);
ctx->v.mail_expunge(mail_txn->txn, mail);
}
struct notify_mail_txn *mail_txn;
for (ctx = ctx_list; ctx != NULL; ctx = ctx->next) {
+ if (ctx->v.mail_update_flags == NULL)
+ continue;
mail_txn = notify_context_find_mail_txn(ctx, mail->transaction);
ctx->v.mail_update_flags(mail_txn->txn, mail, old_flags);
}
struct notify_mail_txn *mail_txn;
for (ctx = ctx_list; ctx != NULL; ctx = ctx->next) {
+ if (ctx->v.mail_update_keywords == NULL)
+ continue;
mail_txn = notify_context_find_mail_txn(ctx, mail->transaction);
ctx->v.mail_update_keywords(mail_txn->txn, mail, old_keywords);
}
struct notify_mail_txn *mail_txn;
for (ctx = ctx_list; ctx != NULL; ctx = ctx->next) {
+ if (ctx->v.mail_transaction_commit == NULL)
+ continue;
mail_txn = notify_context_find_mail_txn(ctx, t);
- ctx->v.mail_transaction_commit(mail_txn->txn, changes);
+ if (ctx->v.mail_transaction_commit != NULL)
+ ctx->v.mail_transaction_commit(mail_txn->txn, changes);
DLLIST_REMOVE(&ctx->mail_txn_list, mail_txn);
i_free(mail_txn);
}
for (ctx = ctx_list; ctx != NULL; ctx = ctx->next) {
mail_txn = notify_context_find_mail_txn(ctx, t);
- ctx->v.mail_transaction_rollback(mail_txn->txn);
+ if (ctx->v.mail_transaction_rollback != NULL)
+ ctx->v.mail_transaction_rollback(mail_txn->txn);
DLLIST_REMOVE(&ctx->mail_txn_list, mail_txn);
i_free(mail_txn);
}
{
struct notify_context *ctx;
- for (ctx = ctx_list; ctx != NULL; ctx = ctx->next)
- ctx->mailbox_delete_txn = ctx->v.mailbox_delete_begin(box);
+ for (ctx = ctx_list; ctx != NULL; ctx = ctx->next) {
+ ctx->mailbox_delete_txn =
+ ctx->v.mailbox_delete_begin == NULL ? NULL :
+ ctx->v.mailbox_delete_begin(box);
+ }
}
void notify_contexts_mailbox_delete_commit(struct mailbox *box)
struct notify_context *ctx;
for (ctx = ctx_list; ctx != NULL; ctx = ctx->next) {
- ctx->v.mailbox_delete_commit(ctx->mailbox_delete_txn, box);
+ if (ctx->v.mailbox_delete_commit != NULL) {
+ ctx->v.mailbox_delete_commit(ctx->mailbox_delete_txn,
+ box);
+ }
ctx->mailbox_delete_txn = NULL;
}
}
struct notify_context *ctx;
for (ctx = ctx_list; ctx != NULL; ctx = ctx->next) {
- ctx->v.mailbox_delete_rollback(ctx->mailbox_delete_txn);
+ if (ctx->v.mailbox_delete_rollback != NULL)
+ ctx->v.mailbox_delete_rollback(ctx->mailbox_delete_txn);
ctx->mailbox_delete_txn = NULL;
}
}
{
struct notify_mail_txn *mail_txn = ctx->mail_txn_list;
- for (; mail_txn != NULL; mail_txn = mail_txn->next)
- ctx->v.mail_transaction_rollback(mail_txn->txn);
- ctx->v.mailbox_delete_rollback(ctx->mailbox_delete_txn);
+ for (; mail_txn != NULL; mail_txn = mail_txn->next) {
+ if (ctx->v.mail_transaction_rollback != NULL)
+ ctx->v.mail_transaction_rollback(mail_txn->txn);
+ }
+ if (ctx->mailbox_delete_txn != NULL &&
+ ctx->v.mailbox_delete_rollback != NULL)
+ ctx->v.mailbox_delete_rollback(ctx->mailbox_delete_txn);
DLLIST_REMOVE(&ctx_list, ctx);
i_free(ctx);
}