Mercurial > dovecot > original-hg > dovecot-1.2
changeset 5967:0a6dd369afff HEAD
Don't cache flags unless we want them.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 12 Jul 2007 06:41:06 +0300 |
parents | 731be87a2128 |
children | 885ed4d5c51d |
files | src/lib-storage/index/index-mail.c |
diffstat | 1 files changed, 28 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/index-mail.c Thu Jul 12 06:40:51 2007 +0300 +++ b/src/lib-storage/index/index-mail.c Thu Jul 12 06:41:06 2007 +0300 @@ -370,16 +370,39 @@ imap_bodystructure_parse_header(pool, part, hdr); } +static bool want_plain_bodystructure_cached(struct index_mail *mail) +{ + if ((mail->wanted_fields & (MAIL_FETCH_IMAP_BODY | + MAIL_FETCH_IMAP_BODYSTRUCTURE)) != 0) + return TRUE; + + if (mail_cache_field_want_add(mail->trans->cache_trans, mail->data.seq, + mail->ibox->cache_fields[MAIL_CACHE_IMAP_BODY].idx)) + return TRUE; + if (mail_cache_field_want_add(mail->trans->cache_trans, mail->data.seq, + mail->ibox->cache_fields[MAIL_CACHE_IMAP_BODYSTRUCTURE].idx)) + return TRUE; + return FALSE; +} + static void index_mail_body_parsed_cache_flags(struct index_mail *mail) { struct index_mail_data *data = &mail->data; + unsigned int cache_flags_idx; uint32_t cache_flags = data->cache_flags; + bool want_cached; + + cache_flags_idx = mail->ibox->cache_fields[MAIL_CACHE_FLAGS].idx; + want_cached = mail_cache_field_want_add(mail->trans->cache_trans, + data->seq, cache_flags_idx); if (data->parsed_bodystructure && - imap_bodystructure_is_plain_7bit(data->parts)) { + imap_bodystructure_is_plain_7bit(data->parts) && + (want_cached || want_plain_bodystructure_cached(mail))) { cache_flags |= MAIL_CACHE_FLAG_TEXT_PLAIN_7BIT_ASCII; /* we need message_parts cached to be able to actually use it in BODY/BODYSTRUCTURE reply */ + want_cached = TRUE; data->save_message_parts = TRUE; } @@ -404,11 +427,11 @@ if (data->body_size.virtual_size == data->body_size.physical_size) cache_flags |= MAIL_CACHE_FLAG_BINARY_BODY; - if (cache_flags != data->cache_flags) { - data->cache_flags = cache_flags; - index_mail_cache_add(mail, MAIL_CACHE_FLAGS, - &cache_flags, sizeof(cache_flags)); + if (cache_flags != data->cache_flags && want_cached) { + index_mail_cache_add_idx(mail, cache_flags_idx, + &cache_flags, sizeof(cache_flags)); } + data->cache_flags = cache_flags; } static void index_mail_body_parsed_cache_message_parts(struct index_mail *mail)