Mercurial > dovecot > core-2.2
changeset 12206:dd53d1a27358
maildir: Avoid opening cache file when getting physical message size.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 29 Sep 2010 18:49:34 +0100 |
parents | 906746b4f383 |
children | 10544c9cd8e8 |
files | src/lib-storage/index/maildir/maildir-mail.c |
diffstat | 1 files changed, 18 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-mail.c Wed Sep 29 18:38:29 2010 +0100 +++ b/src/lib-storage/index/maildir/maildir-mail.c Wed Sep 29 18:49:34 2010 +0100 @@ -387,8 +387,8 @@ maildir_handle_size_caching(mail, TRUE, TRUE); return 0; } - - if (maildir_quick_size_lookup(mail, TRUE, &data->virtual_size) < 0) + if (maildir_quick_size_lookup(mail, TRUE, + &data->virtual_size) < 0) return -1; } if (data->virtual_size != (uoff_t)-1) { @@ -417,14 +417,24 @@ const char *path; int ret; - if (index_mail_get_physical_size(_mail, size_r) == 0) { - i_assert(mail->data.physical_size != (uoff_t)-1); - maildir_handle_size_caching(mail, TRUE, FALSE); - return 0; + if (maildir_uidlist_is_read(mbox->uidlist) || + (_mail->box->flags & MAILBOX_FLAG_POP3_SESSION) != 0) { + /* try to get the size from uidlist (see virtual size above) */ + if (maildir_quick_size_lookup(mail, FALSE, + &data->physical_size) < 0) + return -1; } - if (maildir_quick_size_lookup(mail, FALSE, &data->physical_size) < 0) - return -1; + if (data->physical_size == (uoff_t)-1) { + if (index_mail_get_physical_size(_mail, size_r) == 0) { + i_assert(mail->data.physical_size != (uoff_t)-1); + maildir_handle_size_caching(mail, TRUE, FALSE); + return 0; + } + if (maildir_quick_size_lookup(mail, FALSE, + &data->physical_size) < 0) + return -1; + } if (data->physical_size != (uoff_t)-1) { data->dont_cache_fetch_fields |= MAIL_FETCH_PHYSICAL_SIZE; *size_r = data->physical_size;