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