From: Timo Sirainen Date: Mon, 25 Jan 2016 08:26:17 +0000 (+0200) Subject: imapc: Prefetching shouldn't send FETCH requests for headers that are already cached. X-Git-Tag: 2.2.22.rc1~289 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5085686ff2b4be28e7d631e1bbfa32afe427b7c7;p=thirdparty%2Fdovecot%2Fcore.git imapc: Prefetching shouldn't send FETCH requests for headers that are already cached. --- diff --git a/src/lib-storage/index/imapc/imapc-mail-fetch.c b/src/lib-storage/index/imapc/imapc-mail-fetch.c index a364f270e1..0412582fd0 100644 --- a/src/lib-storage/index/imapc/imapc-mail-fetch.c +++ b/src/lib-storage/index/imapc/imapc-mail-fetch.c @@ -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) diff --git a/src/lib-storage/index/imapc/imapc-mail.c b/src/lib-storage/index/imapc/imapc-mail.c index e59c24e7fc..c3eddeb006 100644 --- a/src/lib-storage/index/imapc/imapc-mail.c +++ b/src/lib-storage/index/imapc/imapc-mail.c @@ -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; diff --git a/src/lib-storage/index/imapc/imapc-mail.h b/src/lib-storage/index/imapc/imapc-mail.h index e2cf72e5ba..52cc1c7643 100644 --- a/src/lib-storage/index/imapc/imapc-mail.h +++ b/src/lib-storage/index/imapc/imapc-mail.h @@ -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,