dovecot-2.2: maildir: If mailbox_update() doesn't affect dovecot...

dovecot at dovecot.org dovecot at dovecot.org
Sat Dec 15 13:25:59 EET 2012


details:   http://hg.dovecot.org/dovecot-2.2/rev/0e88b2518e0f
changeset: 15472:0e88b2518e0f
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Dec 15 13:25:34 2012 +0200
description:
maildir: If mailbox_update() doesn't affect dovecot-uidlist file, don't lock it.

diffstat:

 src/lib-storage/index/maildir/maildir-storage.c |  25 ++++++++++++++-----------
 1 files changed, 14 insertions(+), 11 deletions(-)

diffs (44 lines):

diff -r 88ac919f8afe -r 0e88b2518e0f src/lib-storage/index/maildir/maildir-storage.c
--- a/src/lib-storage/index/maildir/maildir-storage.c	Sat Dec 15 13:01:09 2012 +0200
+++ b/src/lib-storage/index/maildir/maildir-storage.c	Sat Dec 15 13:25:34 2012 +0200
@@ -420,7 +420,7 @@
 {
 	struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
 	struct maildir_uidlist *uidlist;
-	int ret;
+	int ret = 0;
 
 	if (!box->opened) {
 		if (mailbox_open(box) < 0)
@@ -428,18 +428,21 @@
 	}
 	uidlist = mbox->uidlist;
 
-	if (maildir_uidlist_lock(uidlist) <= 0)
-		return -1;
+	if (update->uid_validity != 0 || update->min_next_uid != 0 ||
+	    !guid_128_is_empty(update->mailbox_guid)) {
+		if (maildir_uidlist_lock(uidlist) <= 0)
+			return -1;
 
-	if (!guid_128_is_empty(update->mailbox_guid))
-		maildir_uidlist_set_mailbox_guid(uidlist, update->mailbox_guid);
-	if (update->uid_validity != 0)
-		maildir_uidlist_set_uid_validity(uidlist, update->uid_validity);
-	if (update->min_next_uid != 0) {
-		maildir_uidlist_set_next_uid(uidlist, update->min_next_uid,
-					     FALSE);
+		if (!guid_128_is_empty(update->mailbox_guid))
+			maildir_uidlist_set_mailbox_guid(uidlist, update->mailbox_guid);
+		if (update->uid_validity != 0)
+			maildir_uidlist_set_uid_validity(uidlist, update->uid_validity);
+		if (update->min_next_uid != 0) {
+			maildir_uidlist_set_next_uid(uidlist, update->min_next_uid,
+						     FALSE);
+		}
+		ret = maildir_uidlist_update(uidlist);
 	}
-	ret = maildir_uidlist_update(uidlist);
 	if (ret == 0)
 		ret = index_storage_mailbox_update(box, update);
 	maildir_uidlist_unlock(uidlist);


More information about the dovecot-cvs mailing list