The mail is being opened in any case, so it's unlikely to help anything.
--HG--
branch : HEAD
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_mail_free,
index_mail_set_seq,
index_mail_set_uid,
+ index_mail_set_uid_cache_updates,
index_mail_get_flags,
index_mail_get_keywords,
}
}
+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;
/* 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. */
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);
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;
};
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_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_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_mail_free,
index_mail_set_seq,
index_mail_set_uid,
+ index_mail_set_uid_cache_updates,
index_mail_get_flags,
index_mail_get_keywords,
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;
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);