# HG changeset patch # User Timo Sirainen # Date 1260403093 18000 # Node ID f1c4c0c90da1d69866720364b95fcabd0404498f # Parent 9cccb8617820d923a50c52e7925082b1e61d8642 virtual optimization: If saved highest-modseq matches current one, don't try to find higher ones. diff -r 9cccb8617820 -r f1c4c0c90da1 src/plugins/virtual/virtual-sync.c --- a/src/plugins/virtual/virtual-sync.c Wed Dec 09 18:47:27 2009 -0500 +++ b/src/plugins/virtual/virtual-sync.c Wed Dec 09 18:58:13 2009 -0500 @@ -698,7 +698,7 @@ 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 @@ -715,12 +715,16 @@ !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); + } } }