]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: Prefetching shouldn't send FETCH requests for headers that are already cached.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 25 Jan 2016 08:26:17 +0000 (10:26 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 25 Jan 2016 08:26:17 +0000 (10:26 +0200)
src/lib-storage/index/imapc/imapc-mail-fetch.c
src/lib-storage/index/imapc/imapc-mail.c
src/lib-storage/index/imapc/imapc-mail.h

index a364f270e1c32e44b5b5bf6bdffd362d39acb0e3..0412582fd0c40aa4ebf8cdda8eb3726c75444faa 100644 (file)
@@ -331,7 +331,9 @@ bool imapc_mail_prefetch(struct mail *_mail)
        imapc_mail_update_access_parts(&mail->imail);
 
        fields = imapc_mail_get_wanted_fetch_fields(mail);
-       if (fields != 0 || data->wanted_headers != NULL) T_BEGIN {
+       if (fields != 0 ||
+           (data->wanted_headers != NULL &&
+            !imapc_mail_has_headers_in_cache(&mail->imail, data->wanted_headers))) T_BEGIN {
                if (imapc_mail_send_fetch(_mail, fields,
                                          data->wanted_headers == NULL ? NULL :
                                          data->wanted_headers->name) > 0)
index e59c24e7fc28614ab9b34f20998b948e6650711e..c3eddeb006e368fce60e9f12692f30007241780d 100644 (file)
@@ -299,9 +299,8 @@ imapc_mail_get_stream(struct mail *_mail, bool get_body,
                                      stream_r);
 }
 
-static bool
-imapc_mail_has_headers_in_cache(struct index_mail *mail,
-                               struct mailbox_header_lookup_ctx *headers)
+bool imapc_mail_has_headers_in_cache(struct index_mail *mail,
+                                    struct mailbox_header_lookup_ctx *headers)
 {
        struct mail *_mail = &mail->mail.mail;
        unsigned int i;
index e2cf72e5baa6f8b5185f7bfe592cebbf254303e2..52cc1c7643f554653e549da02f5008e112ba6b11 100644 (file)
@@ -34,6 +34,8 @@ int imapc_mail_fetch(struct mail *mail, enum mail_fetch_field fields,
 bool imapc_mail_prefetch(struct mail *mail);
 void imapc_mail_fetch_flush(struct imapc_mailbox *mbox);
 void imapc_mail_init_stream(struct imapc_mail *mail);
+bool imapc_mail_has_headers_in_cache(struct index_mail *mail,
+                                    struct mailbox_header_lookup_ctx *headers);
 
 void imapc_mail_fetch_update(struct imapc_mail *mail,
                             const struct imapc_untagged_reply *reply,