]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Mailbox list index's ext_id shouldn't be cached in mail_storage.
authorTimo Sirainen <tss@iki.fi>
Sun, 2 Oct 2011 15:39:49 +0000 (18:39 +0300)
committerTimo Sirainen <tss@iki.fi>
Sun, 2 Oct 2011 15:39:49 +0000 (18:39 +0300)
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.

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

index da9cd1cf0ff959b6bd8623459006ee727055d1d7..9b55c9e478394a3c2cdfc416fe985289a9532571 100644 (file)
@@ -298,6 +298,7 @@ void index_storage_mailbox_alloc(struct mailbox *box, const char *vname,
                     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;
index 800c058184c9a0ff4287c1dd27ef66cef002061d..2e4a38eb162e2811f6bc902d0403d25eb10524d4 100644 (file)
@@ -42,6 +42,7 @@ struct index_mailbox_context {
        uint32_t vsize_hdr_ext_id;
 
        time_t sync_last_check;
+       uint32_t list_index_sync_ext_id;
 };
 
 #define INDEX_STORAGE_CONTEXT(obj) \
index f2fb90c12c1c2fc75be871827df861a7bddffb77..254261f3ace9a245119ed722c45573a0a851cefa 100644 (file)
@@ -443,18 +443,19 @@ enum mailbox_sync_type index_sync_type_convert(enum mail_index_sync_type type)
        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 @@ int index_storage_list_index_has_changed(struct mailbox *box,
        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 @@ void index_storage_list_index_update_sync(struct mailbox *box,
                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 @@ void index_storage_list_index_update_sync(struct mailbox *box,
        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);
 }
index ae3fce339f7af6ee7ab3d49233eaed7b3464c495..0dda84b4753d7c5492154ffd14e348b0bc23b663 100644 (file)
@@ -52,7 +52,6 @@ maildir_storage_create(struct mail_storage *_storage, struct mail_namespace *ns,
 
        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 @@ maildir_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list,
        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);
index 817f7a0fe4d8dcb652f601aa75cd78116b472ee0..00946bb9f798bb21838dde7aaab816fd18c58126 100644 (file)
@@ -67,8 +67,6 @@ struct maildir_storage {
 
        const struct maildir_settings *set;
        const char *temp_prefix;
-
-       uint32_t maildir_list_ext_id;
 };
 
 struct maildir_mailbox {
@@ -87,6 +85,7 @@ struct maildir_mailbox {
 
        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;
index 213b2c251efaf9dd2dbe9755018fa2c07fa75362..d38c67a24f97a583db814d6e49a870080aa027ab 100644 (file)
@@ -685,17 +685,18 @@ int maildir_sync_index(struct maildir_index_sync_context *ctx,
        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 @@ int maildir_list_index_has_changed(struct mailbox *box,
        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 @@ void maildir_list_index_update_sync(struct mailbox *box,
 
        /* 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 @@ void maildir_list_index_update_sync(struct mailbox *box,
        }
 
        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);
 }
index 9626bd14eda2456510ef16626ae2dc71ea4b5024..6ac290670871adc806b341a9502b4f9cc3fbcd9b 100644 (file)
@@ -87,7 +87,6 @@ struct mail_storage {
        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;