]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: Update per-flag modseq value a bit more correctly.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sat, 5 Aug 2017 05:29:12 +0000 (14:29 +0900)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Mon, 14 Aug 2017 08:20:34 +0000 (11:20 +0300)
This changes the code to be similar to the per-mail modseq updating in
mail_index_modseq_update(). It probably wasn't exactly wrong previously
either, but this change is required for the following commits.

src/lib-index/mail-index-modseq.c

index 37bd278120559c9e8f5c5817719f1a9f754936d7..d6592b6997ce8ad2af74c334ec9504d3dc58e734 100644 (file)
@@ -581,8 +581,13 @@ static void
 modseqs_update(ARRAY_TYPE(modseqs) *array, uint32_t seq1, uint32_t seq2,
               uint64_t value)
 {
-       for (; seq1 <= seq2; seq1++)
-               array_idx_set(array, seq1-1, &value);
+       uint64_t *modseqp;
+
+       for (; seq1 <= seq2; seq1++) {
+               modseqp = array_idx_modifiable(array, seq1-1);
+               if (*modseqp < value)
+                       *modseqp = value;
+       }
 }
 
 static void
@@ -590,6 +595,7 @@ modseqs_idx_update(struct mail_index_modseq_sync *ctx, unsigned int idx,
                   uint32_t seq1, uint32_t seq2)
 {
        struct metadata_modseqs *metadata;
+       uint64_t modseq;
 
        if (!ctx->view->index->modseqs_enabled) {
                /* we want to keep permanent modseqs updated, but don't bother
@@ -597,10 +603,11 @@ modseqs_idx_update(struct mail_index_modseq_sync *ctx, unsigned int idx,
                return;
        }
 
+       modseq = mail_transaction_log_view_get_prev_modseq(ctx->log_view);
        metadata = array_idx_modifiable(&ctx->mmap->metadata_modseqs, idx);
        if (!array_is_created(&metadata->modseqs))
                i_array_init(&metadata->modseqs, seq2 + 16);
-       modseqs_update(&metadata->modseqs, seq1, seq2, ctx->highest_modseq);
+       modseqs_update(&metadata->modseqs, seq1, seq2, modseq);
 }
 
 void mail_index_modseq_update_flags(struct mail_index_modseq_sync *ctx,