Mercurial > dovecot > core-2.2
changeset 13592:d9b0cd5b77b5
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.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 02 Oct 2011 18:39:49 +0300 |
parents | 612b8a73ada7 |
children | 37c078f1745c |
files | src/lib-storage/index/index-storage.c src/lib-storage/index/index-storage.h src/lib-storage/index/index-sync.c src/lib-storage/index/maildir/maildir-storage.c src/lib-storage/index/maildir/maildir-storage.h src/lib-storage/index/maildir/maildir-sync-index.c src/lib-storage/mail-storage-private.h |
diffstat | 7 files changed, 25 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- 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;
--- 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) \
--- 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); }
--- 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);
--- 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;
--- 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); }
--- 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;