changeset 8276:dcc80beecb40 HEAD

dict quota: Don't crash when recalculating quota (and quota warnings enabled).
author Timo Sirainen <tss@iki.fi>
date Thu, 16 Oct 2008 14:49:37 +0300
parents 0a8320a714b5
children 943955343653
files src/plugins/quota/quota-storage.c
diffstat 1 files changed, 7 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/quota/quota-storage.c	Thu Oct 16 12:47:05 2008 +0300
+++ b/src/plugins/quota/quota-storage.c	Thu Oct 16 14:49:37 2008 +0300
@@ -283,11 +283,8 @@
 	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 @@
 				     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)