Mercurial > dovecot > core-2.2
changeset 1770:ba17c15b9b40 HEAD
Headers were returned twice sometimes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 10 Sep 2003 05:07:05 +0300 |
parents | c2ba78db758e |
children | 63254344ea0e |
files | src/lib-storage/index/index-mail-headers.c |
diffstat | 1 files changed, 21 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/index-mail-headers.c Wed Sep 10 04:50:26 2003 +0300 +++ b/src/lib-storage/index/index-mail-headers.c Wed Sep 10 05:07:05 2003 +0300 @@ -470,6 +470,17 @@ return TRUE; } +static void trash_partial_headers(struct index_mail *mail) +{ + struct index_mail_data *data = &mail->data; + + data->header_data_cached_partial = FALSE; + data->header_data_cached = data->header_data_cached_contiguous; + + str_truncate(data->header_data, data->header_data_uncached_offset); + cached_headers_clear_values(mail); +} + int index_mail_parse_headers(struct index_mail *mail) { struct mail_cache *cache = mail->ibox->index->cache; @@ -489,13 +500,7 @@ if (!data->header_fully_parsed && index_mail_can_cache_headers(mail)) { if (data->header_data_cached_partial) { /* too difficult to handle efficiently, trash it */ - data->header_data_cached_partial = FALSE; - data->header_data_cached = - data->header_data_cached_contiguous; - - str_truncate(data->header_data, - data->header_data_uncached_offset); - cached_headers_clear_values(mail); + trash_partial_headers(mail); } /* add all cached headers to beginning of header_data */ @@ -610,12 +615,17 @@ i_assert(*minimum_fields != NULL); - if (mail->data.header_data == NULL) - mail->data.header_data = str_new(mail->pool, 4096); + if (data->header_data == NULL) + data->header_data = str_new(mail->pool, 4096); idx = mail_find_wanted_headers(mail, minimum_fields); if (idx >= 0) { /* copy from cache to header_data */ + if (data->header_data_cached_partial) { + /* Some headers may already partially be in + header_data, we don't want them twice */ + trash_partial_headers(mail); + } for (i = data->header_data_cached; i <= idx; i++) { str = mail_cache_lookup_string_field( mail->ibox->index->cache, data->rec, @@ -626,11 +636,8 @@ str_append(data->header_data, str); } data->header_data_cached = idx+1; - if (!data->header_data_cached_partial) { - data->header_data_uncached_offset = - str_len(data->header_data); - data->header_data_cached_contiguous = idx+1; - } + data->header_data_uncached_offset = str_len(data->header_data); + data->header_data_cached_contiguous = idx+1; } else { /* it's not cached yet - see if we have them parsed */ all_saved = TRUE;