dovecot-2.0: maildir: Avoid opening cache file when getting phys...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Sep 29 20:49:37 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/dd53d1a27358
changeset: 12206:dd53d1a27358
user: Timo Sirainen <tss at iki.fi>
date: Wed Sep 29 18:49:34 2010 +0100
description:
maildir: Avoid opening cache file when getting physical message size.
diffstat:
src/lib-storage/index/maildir/maildir-mail.c | 26 ++++++++++++++++++--------
1 files changed, 18 insertions(+), 8 deletions(-)
diffs (45 lines):
diff -r 906746b4f383 -r dd53d1a27358 src/lib-storage/index/maildir/maildir-mail.c
--- 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;
More information about the dovecot-cvs
mailing list