From: Timo Sirainen Date: Wed, 9 Dec 2009 23:58:13 +0000 (-0500) Subject: virtual optimization: If saved highest-modseq matches current one, don't try to find... X-Git-Tag: 2.0.beta1~36 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3b1dd975d0c543d76679593f86e136d43bf40635;p=thirdparty%2Fdovecot%2Fcore.git virtual optimization: If saved highest-modseq matches current one, don't try to find higher ones. --HG-- branch : HEAD --- diff --git a/src/plugins/virtual/virtual-sync.c b/src/plugins/virtual/virtual-sync.c index a1a9dd8610..98efe0a206 100644 --- a/src/plugins/virtual/virtual-sync.c +++ b/src/plugins/virtual/virtual-sync.c @@ -689,7 +689,7 @@ static int virtual_sync_backend_box_continue(struct virtual_sync_context *ctx, struct index_mailbox *ibox = (struct index_mailbox *)bbox->box; struct mail_search_result *result; ARRAY_TYPE(seq_range) removed_uids, added_uids, flag_update_uids; - uint64_t modseq; + uint64_t modseq, old_highest_modseq; uint32_t seq, uid, old_msg_count; /* initialize the search result from all the existing messages in @@ -706,12 +706,16 @@ static int virtual_sync_backend_box_continue(struct virtual_sync_context *ctx, !mail_index_lookup_seq_range(ibox->view, 1, bbox->sync_next_uid-1, &seq, &old_msg_count)) old_msg_count = 0; + old_highest_modseq = mail_index_modseq_get_highest(ibox->view); + t_array_init(&flag_update_uids, I_MIN(128, old_msg_count)); - for (seq = 1; seq <= old_msg_count; seq++) { - modseq = mail_index_modseq_lookup(ibox->view, seq); - if (modseq > bbox->sync_highest_modseq) { - mail_index_lookup_uid(ibox->view, seq, &uid); - seq_range_array_add(&flag_update_uids, 0, uid); + if (bbox->sync_highest_modseq < old_highest_modseq) { + for (seq = 1; seq <= old_msg_count; seq++) { + modseq = mail_index_modseq_lookup(ibox->view, seq); + if (modseq > bbox->sync_highest_modseq) { + mail_index_lookup_uid(ibox->view, seq, &uid); + seq_range_array_add(&flag_update_uids, 0, uid); + } } }