Mercurial > dovecot > core-2.2
changeset 21445:be855523d700
lib-storage: Clear virtual size from index if size is corrupted
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Thu, 26 Jan 2017 09:42:26 +0200 |
parents | ae33f73964e8 |
children | d6ca4c4c7202 |
files | src/lib-storage/index/index-mail.c |
diffstat | 1 files changed, 15 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/index-mail.c Sat Jan 14 18:34:11 2017 +0200 +++ b/src/lib-storage/index/index-mail.c Thu Jan 26 09:42:26 2017 +0200 @@ -2204,6 +2204,19 @@ (void)mail_get_special(mail, MAIL_FETCH_GUID, &str); } +static void +index_mail_reset_vsize_ext(struct mail *mail, struct index_mail *imail) +{ + unsigned int idx; + uint32_t vsize = 0; + struct mail_index_view *view = mail->transaction->view; + if (mail_index_map_get_ext_idx(view->map, imail->vsize_ext_id, + &idx)) { + mail_index_update_ext(mail->transaction->itrans, mail->seq, + imail->vsize_ext_id, &vsize, NULL); + } +} + void index_mail_set_cache_corrupted(struct mail *mail, enum mail_fetch_field field) { @@ -2226,12 +2239,14 @@ imail->data.physical_size = (uoff_t)-1; imail->data.virtual_size = (uoff_t)-1; imail->data.parts = NULL; + index_mail_reset_vsize_ext(mail, imail); break; case MAIL_FETCH_VIRTUAL_SIZE: field_name = "virtual size"; imail->data.physical_size = (uoff_t)-1; imail->data.virtual_size = (uoff_t)-1; imail->data.parts = NULL; + index_mail_reset_vsize_ext(mail, imail); break; case MAIL_FETCH_MESSAGE_PARTS: field_name = "MIME parts";