]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Mail copying: Avoid updating cache file because of copying.
authorTimo Sirainen <tss@iki.fi>
Wed, 25 Feb 2009 17:22:33 +0000 (12:22 -0500)
committerTimo Sirainen <tss@iki.fi>
Wed, 25 Feb 2009 17:22:33 +0000 (12:22 -0500)
The mail is being opened in any case, so it's unlikely to help anything.

--HG--
branch : HEAD

src/lib-storage/index/cydir/cydir-mail.c
src/lib-storage/index/dbox/dbox-mail.c
src/lib-storage/index/index-mail.c
src/lib-storage/index/index-mail.h
src/lib-storage/index/maildir/maildir-mail.c
src/lib-storage/index/mbox/mbox-mail.c
src/lib-storage/index/raw/raw-mail.c
src/lib-storage/mail-copy.c
src/lib-storage/mail-storage-private.h

index dc86eecd5068e7e1efa2a8e4cb04bc4cbc791df4..548184d9ef5ac0b846881f58b2ee90f072490c10 100644 (file)
@@ -118,6 +118,7 @@ struct mail_vfuncs cydir_mail_vfuncs = {
        index_mail_free,
        index_mail_set_seq,
        index_mail_set_uid,
+       index_mail_set_uid_cache_updates,
 
        index_mail_get_flags,
        index_mail_get_keywords,
index 0edcc912fa3fd27af3fee20a9e005508e2b501f5..630fd2523f35af7ec8f71b9bced96ddf35aeea70 100644 (file)
@@ -307,6 +307,7 @@ struct mail_vfuncs dbox_mail_vfuncs = {
        index_mail_free,
        index_mail_set_seq,
        index_mail_set_uid,
+       index_mail_set_uid_cache_updates,
 
        index_mail_get_flags,
        index_mail_get_keywords,
index 1c0487ffd71f827f3bca7afaf5ab79d5cf635412..01eb811755d6155b35c41ec76a7804c4a340adf6 100644 (file)
@@ -1312,6 +1312,13 @@ bool index_mail_set_uid(struct mail *_mail, uint32_t uid)
        }
 }
 
+void index_mail_set_uid_cache_updates(struct mail *_mail, bool set)
+{
+       struct index_mail *mail = (struct index_mail *)_mail;
+
+       mail->data.no_caching = set || mail->data.forced_no_caching;
+}
+
 void index_mail_free(struct mail *_mail)
 {
        struct index_mail *mail = (struct index_mail *)_mail;
@@ -1369,6 +1376,7 @@ void index_mail_cache_parse_deinit(struct mail *_mail, time_t received_date,
                /* we're going to delete this mail anyway,
                   don't bother trying to update cache file */
                mail->data.no_caching = TRUE;
+               mail->data.forced_no_caching = TRUE;
        }
 
        /* This is needed with 0 byte mails to get hdr=NULL call done. */
@@ -1467,6 +1475,7 @@ void index_mail_set_cache_corrupted(struct mail *mail,
                                           imail->trans->trans);
 
        imail->data.no_caching = TRUE;
+       imail->data.forced_no_caching = TRUE;
        mail_cache_set_corrupted(imail->ibox->cache,
                                 "Broken %s for mail UID %u",
                                 field_name, mail->uid);
index d63cc9d8ce21954d1320548dee9d635855ac5490..8b117e37a336c7fd69fd29e847cda3739913aa92 100644 (file)
@@ -106,6 +106,7 @@ struct index_mail_data {
        unsigned int messageparts_saved_to_cache:1;
        unsigned int header_parsed:1;
        unsigned int no_caching:1;
+       unsigned int forced_no_caching:1;
        unsigned int destroying_stream:1;
 };
 
@@ -149,6 +150,7 @@ void index_mail_init(struct index_mail *mail,
 
 void index_mail_set_seq(struct mail *mail, uint32_t seq);
 bool index_mail_set_uid(struct mail *mail, uint32_t uid);
+void index_mail_set_uid_cache_updates(struct mail *mail, bool set);
 void index_mail_close(struct mail *mail);
 void index_mail_free(struct mail *mail);
 
index da1a260f38f424164d8ed3a48fbe8999b102bb22..66500a45ec0f636e850fcb7a22a94f6130318192 100644 (file)
@@ -509,6 +509,7 @@ struct mail_vfuncs maildir_mail_vfuncs = {
        index_mail_free,
        index_mail_set_seq,
        index_mail_set_uid,
+       index_mail_set_uid_cache_updates,
 
        index_mail_get_flags,
        index_mail_get_keywords,
index 8487a60dcb8001a02731d653d9f3c464927ade28..9111999d7dfcaa644a7305e334ff472e035ff289 100644 (file)
@@ -342,6 +342,7 @@ struct mail_vfuncs mbox_mail_vfuncs = {
        index_mail_free,
        mbox_mail_set_seq,
        mbox_mail_set_uid,
+       index_mail_set_uid_cache_updates,
 
        index_mail_get_flags,
        index_mail_get_keywords,
index 18a4690bd38c3bf6f868b92c1cc5988c62290dcc..2a1736b19677d8aaea1be4a011dd830df5746216 100644 (file)
@@ -111,6 +111,7 @@ struct mail_vfuncs raw_mail_vfuncs = {
        index_mail_free,
        index_mail_set_seq,
        index_mail_set_uid,
+       index_mail_set_uid_cache_updates,
 
        index_mail_get_flags,
        index_mail_get_keywords,
index 888d175e9c60d8b515bac356a3637a64672a7511..057cb8e7143e8966af32275909cefac6733229a4 100644 (file)
@@ -7,10 +7,15 @@
 
 int mail_storage_copy(struct mail_save_context *ctx, struct mail *mail)
 {
+       struct mail_private *pmail = (struct mail_private *)mail;
        struct istream *input;
        const char *from_envelope, *guid;
        time_t received_date;
 
+       /* we need to open the file in any case. caching metadata is unlikely
+          to help anything. */
+       pmail->v.set_uid_cache_updates(mail, TRUE);
+
        if (mail_get_stream(mail, NULL, NULL, &input) < 0)
                return -1;
 
index 0286a8572629a00006078d7b3c2c0f5afc1bc4ce..505421cdd68f5ffa8fed21d38ec059c96df65472 100644 (file)
@@ -228,6 +228,7 @@ struct mail_vfuncs {
        void (*free)(struct mail *mail);
        void (*set_seq)(struct mail *mail, uint32_t seq);
        bool (*set_uid)(struct mail *mail, uint32_t uid);
+       void (*set_uid_cache_updates)(struct mail *mail, bool set);
 
        enum mail_flags (*get_flags)(struct mail *mail);
        const char *const *(*get_keywords)(struct mail *mail);