dovecot-1.1: quota: Previous dict quota fix broke trash plugin.
dovecot at dovecot.org
dovecot at dovecot.org
Sat Oct 18 14:54:33 EEST 2008
details: http://hg.dovecot.org/dovecot-1.1/rev/b6605966e4ec
changeset: 7944:b6605966e4ec
user: Timo Sirainen <tss at iki.fi>
date: Sat Oct 18 14:54:06 2008 +0300
description:
quota: Previous dict quota fix broke trash plugin.
diffstat:
1 file changed, 19 insertions(+), 9 deletions(-)
src/plugins/quota/quota-storage.c | 28 +++++++++++++++++++---------
diffs (60 lines):
diff -r b085c58fcf14 -r b6605966e4ec src/plugins/quota/quota-storage.c
--- a/src/plugins/quota/quota-storage.c Sat Oct 18 13:58:03 2008 +0300
+++ b/src/plugins/quota/quota-storage.c Sat Oct 18 14:54:06 2008 +0300
@@ -253,20 +253,24 @@ static int quota_save_finish(struct mail
return quota_check(ctx->transaction, ctx->dest_mail);
}
-static void quota_mailbox_sync_finish(struct quota_mailbox *qbox)
+static void quota_mailbox_sync_cleanup(struct quota_mailbox *qbox)
{
if (array_is_created(&qbox->expunge_uids)) {
array_clear(&qbox->expunge_uids);
array_clear(&qbox->expunge_sizes);
}
- if (qbox->expunge_qt != NULL) {
- if (qbox->expunge_qt->tmp_mail != NULL) {
- mail_free(&qbox->expunge_qt->tmp_mail);
- mailbox_transaction_rollback(&qbox->expunge_trans);
- }
+ if (qbox->expunge_qt != NULL && qbox->expunge_qt->tmp_mail != NULL) {
+ mail_free(&qbox->expunge_qt->tmp_mail);
+ mailbox_transaction_rollback(&qbox->expunge_trans);
+ }
+}
+
+static void quota_mailbox_sync_commit(struct quota_mailbox *qbox)
+{
+ quota_mailbox_sync_cleanup(qbox);
+ if (qbox->expunge_qt != NULL)
(void)quota_transaction_commit(&qbox->expunge_qt);
- }
qbox->recalculate = FALSE;
}
@@ -282,8 +286,14 @@ static void quota_mailbox_sync_notify(st
if (qbox->module_ctx.super.sync_notify != NULL)
qbox->module_ctx.super.sync_notify(box, uid, sync_type);
- if (sync_type != MAILBOX_SYNC_TYPE_EXPUNGE || qbox->recalculate)
+ if (sync_type != MAILBOX_SYNC_TYPE_EXPUNGE || qbox->recalculate) {
+ if (uid == 0) {
+ /* free the transaction before view syncing begins,
+ otherwise it'll crash. */
+ quota_mailbox_sync_cleanup(qbox);
+ }
return;
+ }
/* we're in the middle of syncing the mailbox, so it's a bad idea to
try and get the message sizes at this point. Rely on sizes that
@@ -337,7 +347,7 @@ static int quota_mailbox_sync_deinit(str
/* update quota only after syncing is finished. the quota commit may
recalculate the quota and cause all mailboxes to be synced,
including the one we're already syncing. */
- quota_mailbox_sync_finish(qbox);
+ quota_mailbox_sync_commit(qbox);
return ret;
}
More information about the dovecot-cvs
mailing list