dovecot-2.1: lib-storage: Mailbox list index's ext_id shouldn't ...

dovecot at dovecot.org dovecot at dovecot.org
Sun Oct 2 18:31:29 EEST 2011


details:   http://hg.dovecot.org/dovecot-2.1/rev/d9b0cd5b77b5
changeset: 13592:d9b0cd5b77b5
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Oct 02 18:39:49 2011 +0300
description:
lib-storage: Mailbox list index's ext_id shouldn't be cached in mail_storage.
It's mailbox_list-specific, not mail_storage-specific. The easiest fix was
to just cache it into mailbox rather than create a new index_mailbox_list.

diffstat:

 src/lib-storage/index/index-storage.c              |   1 +
 src/lib-storage/index/index-storage.h              |   1 +
 src/lib-storage/index/index-sync.c                 |  24 ++++++++++-----------
 src/lib-storage/index/maildir/maildir-storage.c    |   2 +-
 src/lib-storage/index/maildir/maildir-storage.h    |   3 +-
 src/lib-storage/index/maildir/maildir-sync-index.c |  22 +++++++++-----------
 src/lib-storage/mail-storage-private.h             |   1 -
 7 files changed, 25 insertions(+), 29 deletions(-)

diffs (188 lines):

diff -r 612b8a73ada7 -r d9b0cd5b77b5 src/lib-storage/index/index-storage.c
--- a/src/lib-storage/index/index-storage.c	Sun Oct 02 18:30:32 2011 +0300
+++ b/src/lib-storage/index/index-storage.c	Sun Oct 02 18:39:49 2011 +0300
@@ -298,6 +298,7 @@
 		     box->pool, sizeof(void *), 5);
 
 	ibox = p_new(box->pool, struct index_mailbox_context, 1);
+	ibox->list_index_sync_ext_id = (uint32_t)-1;
 	ibox->index_flags = MAIL_INDEX_OPEN_FLAG_CREATE |
 		mail_storage_settings_to_index_flags(box->storage->set);
 	ibox->next_lock_notify = time(NULL) + LOCK_NOTIFY_INTERVAL;
diff -r 612b8a73ada7 -r d9b0cd5b77b5 src/lib-storage/index/index-storage.h
--- a/src/lib-storage/index/index-storage.h	Sun Oct 02 18:30:32 2011 +0300
+++ b/src/lib-storage/index/index-storage.h	Sun Oct 02 18:39:49 2011 +0300
@@ -42,6 +42,7 @@
 	uint32_t vsize_hdr_ext_id;
 
 	time_t sync_last_check;
+	uint32_t list_index_sync_ext_id;
 };
 
 #define INDEX_STORAGE_CONTEXT(obj) \
diff -r 612b8a73ada7 -r d9b0cd5b77b5 src/lib-storage/index/index-sync.c
--- a/src/lib-storage/index/index-sync.c	Sun Oct 02 18:30:32 2011 +0300
+++ b/src/lib-storage/index/index-sync.c	Sun Oct 02 18:39:49 2011 +0300
@@ -443,18 +443,19 @@
 	return ret;
 }
 
-static unsigned int
-index_storage_list_get_ext_id(struct mail_storage *storage,
-			      struct mail_index_view *view)
+static uint32_t
+index_list_get_ext_id(struct mailbox *box, struct mail_index_view *view)
 {
-	if (storage->list_sync_ext_id == (uint32_t)-1) {
-		storage->list_sync_ext_id =
+	struct index_mailbox_context *ibox = INDEX_STORAGE_CONTEXT(box);
+
+	if (ibox->list_index_sync_ext_id == (uint32_t)-1) {
+		ibox->list_index_sync_ext_id =
 			mail_index_ext_register(mail_index_view_get_index(view),
 				"index sync", 0,
 				sizeof(struct index_storage_list_index_record),
 				sizeof(uint32_t));
 	}
-	return storage->list_sync_ext_id;
+	return ibox->list_index_sync_ext_id;
 }
 
 int index_storage_list_index_has_changed(struct mailbox *box,
@@ -471,7 +472,7 @@
 	if (mail_index_is_in_memory(mail_index_view_get_index(list_view)))
 		return 1;
 
-	ext_id = index_storage_list_get_ext_id(box->storage, list_view);
+	ext_id = index_list_get_ext_id(box, list_view);
 	mail_index_lookup_ext(list_view, seq, ext_id, &data, &expunged);
 	rec = data;
 
@@ -512,7 +513,7 @@
 		return;
 
 	/* get the current record */
-	ext_id = index_storage_list_get_ext_id(box->storage, list_view);
+	ext_id = index_list_get_ext_id(box, list_view);
 	mail_index_lookup_ext(list_view, seq, ext_id, &data, &expunged);
 	if (expunged)
 		return;
@@ -532,9 +533,6 @@
 	new_rec.mtime = st.st_mtime & 0xffffffffU;
 
 	if (old_rec == NULL ||
-	    memcmp(old_rec, &new_rec, sizeof(*old_rec)) != 0) {
-		mail_index_update_ext(trans, seq,
-				      box->storage->list_sync_ext_id,
-				      &new_rec, NULL);
-	}
+	    memcmp(old_rec, &new_rec, sizeof(*old_rec)) != 0)
+		mail_index_update_ext(trans, seq, ext_id, &new_rec, NULL);
 }
diff -r 612b8a73ada7 -r d9b0cd5b77b5 src/lib-storage/index/maildir/maildir-storage.c
--- a/src/lib-storage/index/maildir/maildir-storage.c	Sun Oct 02 18:30:32 2011 +0300
+++ b/src/lib-storage/index/maildir/maildir-storage.c	Sun Oct 02 18:39:49 2011 +0300
@@ -52,7 +52,6 @@
 
 	storage->set = mail_storage_get_driver_settings(_storage);
 
-	storage->maildir_list_ext_id = (uint32_t)-1;
 	storage->temp_prefix = p_strdup(_storage->pool,
 					mailbox_list_get_temp_prefix(list));
 
@@ -275,6 +274,7 @@
 	mbox->box.storage = storage;
 	mbox->box.list = list;
 	mbox->box.mail_vfuncs = &maildir_mail_vfuncs;
+	mbox->maildir_list_index_ext_id = (uint32_t)-1;
 
 	index_storage_mailbox_alloc(&mbox->box, vname, flags,
 				    MAILDIR_INDEX_PREFIX);
diff -r 612b8a73ada7 -r d9b0cd5b77b5 src/lib-storage/index/maildir/maildir-storage.h
--- a/src/lib-storage/index/maildir/maildir-storage.h	Sun Oct 02 18:30:32 2011 +0300
+++ b/src/lib-storage/index/maildir/maildir-storage.h	Sun Oct 02 18:39:49 2011 +0300
@@ -67,8 +67,6 @@
 
 	const struct maildir_settings *set;
 	const char *temp_prefix;
-
-	uint32_t maildir_list_ext_id;
 };
 
 struct maildir_mailbox {
@@ -87,6 +85,7 @@
 
 	struct maildir_index_header maildir_hdr;
 	uint32_t maildir_ext_id;
+	uint32_t maildir_list_index_ext_id;
 
 	unsigned int synced:1;
 	unsigned int syncing_commit:1;
diff -r 612b8a73ada7 -r d9b0cd5b77b5 src/lib-storage/index/maildir/maildir-sync-index.c
--- a/src/lib-storage/index/maildir/maildir-sync-index.c	Sun Oct 02 18:30:32 2011 +0300
+++ b/src/lib-storage/index/maildir/maildir-sync-index.c	Sun Oct 02 18:39:49 2011 +0300
@@ -685,17 +685,18 @@
 	return ret < 0 ? -1 : (full_rescan ? 0 : 1);
 }
 
-static unsigned int maildir_list_get_ext_id(struct maildir_storage *storage,
-					    struct mail_index_view *view)
+static unsigned int
+maildir_list_get_ext_id(struct maildir_mailbox *mbox,
+			struct mail_index_view *view)
 {
-	if (storage->maildir_list_ext_id == (uint32_t)-1) {
-		storage->maildir_list_ext_id =
+	if (mbox->maildir_list_index_ext_id == (uint32_t)-1) {
+		mbox->maildir_list_index_ext_id =
 			mail_index_ext_register(mail_index_view_get_index(view),
 				"maildir", 0,
 				sizeof(struct maildir_list_index_record),
 				sizeof(uint32_t));
 	}
-	return storage->maildir_list_ext_id;
+	return mbox->maildir_list_index_ext_id;
 }
 
 int maildir_list_index_has_changed(struct mailbox *box,
@@ -713,7 +714,7 @@
 	if (mbox->storage->set->maildir_very_dirty_syncs)
 		return index_storage_list_index_has_changed(box, list_view, seq);
 
-	ext_id = maildir_list_get_ext_id(mbox->storage, list_view);
+	ext_id = maildir_list_get_ext_id(mbox, list_view);
 	mail_index_lookup_ext(list_view, seq, ext_id, &data, &expunged);
 	rec = data;
 
@@ -768,7 +769,7 @@
 
 	/* get the current record */
 	list_view = mail_index_transaction_get_view(trans);
-	ext_id = maildir_list_get_ext_id(mbox->storage, list_view);
+	ext_id = maildir_list_get_ext_id(mbox, list_view);
 	mail_index_lookup_ext(list_view, seq, ext_id, &data, &expunged);
 	if (expunged)
 		return;
@@ -784,9 +785,6 @@
 	}
 
 	if (old_rec == NULL ||
-	    memcmp(old_rec, &new_rec, sizeof(*old_rec)) != 0) {
-		mail_index_update_ext(trans, seq,
-				      mbox->storage->maildir_list_ext_id,
-				      &new_rec, NULL);
-	}
+	    memcmp(old_rec, &new_rec, sizeof(*old_rec)) != 0)
+		mail_index_update_ext(trans, seq, ext_id, &new_rec, NULL);
 }
diff -r 612b8a73ada7 -r d9b0cd5b77b5 src/lib-storage/mail-storage-private.h
--- a/src/lib-storage/mail-storage-private.h	Sun Oct 02 18:30:32 2011 +0300
+++ b/src/lib-storage/mail-storage-private.h	Sun Oct 02 18:39:49 2011 +0300
@@ -87,7 +87,6 @@
 	struct mail_user *user;
 	const char *temp_path_prefix;
 	const struct mail_storage_settings *set;
-	uint32_t list_sync_ext_id;
 
 	enum mail_storage_flags flags;
 


More information about the dovecot-cvs mailing list