From: Timo Sirainen Date: Thu, 16 Oct 2008 11:49:37 +0000 (+0300) Subject: dict quota: Don't crash when recalculating quota (and quota warnings enabled). X-Git-Tag: 1.2.alpha3~39 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c1563f46bd9ae4ad20f37f003220443a6224fb9f;p=thirdparty%2Fdovecot%2Fcore.git dict quota: Don't crash when recalculating quota (and quota warnings enabled). --HG-- branch : HEAD --- diff --git a/src/plugins/quota/quota-storage.c b/src/plugins/quota/quota-storage.c index 0ff32b2cc3..a56692b68e 100644 --- a/src/plugins/quota/quota-storage.c +++ b/src/plugins/quota/quota-storage.c @@ -283,11 +283,8 @@ static void quota_mailbox_sync_notify(struct mailbox *box, uint32_t uid, 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 (uid == 0) - quota_mailbox_sync_finish(qbox); + if (sync_type != MAILBOX_SYNC_TYPE_EXPUNGE || qbox->recalculate) 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 @@ -335,11 +332,14 @@ static int quota_mailbox_sync_deinit(struct mailbox_sync_context *ctx, struct mailbox_status *status_r) { struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->box); + int ret; - /* just in case sync_notify() wasn't called with uid=0 */ + ret = qbox->module_ctx.super.sync_deinit(ctx, status_items, status_r); + /* 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); - - return qbox->module_ctx.super.sync_deinit(ctx, status_items, status_r); + return ret; } static int quota_mailbox_close(struct mailbox *box)