]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Update mailbox.recent_flags_count correctly.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 27 Sep 2016 10:28:15 +0000 (13:28 +0300)
committerGitLab <gitlab@git.dovecot.net>
Tue, 27 Sep 2016 11:02:47 +0000 (14:02 +0300)
The counter was increased even if the UID was already in recent_flags.
This is the only place where I found that recent_flags and
recent_flags_count could become desynced (which they definitely were in
a core dump), so hopefully this fixes assert-crashes like:

Panic: file index-status.c: line 130 (index_storage_get_open_status): assertion failed: (status_r->recent <= status_r->messages)

src/lib-storage/mailbox-recent-flags.c

index 140fad7798fc997bf27192ef99108a0cb42a44d5..fe2ecb42463b13a61e056bc67d15c54578c3092e 100644 (file)
@@ -23,8 +23,10 @@ void mailbox_recent_flags_set_uid_forced(struct mailbox *box, uint32_t uid)
 {
        box->recent_flags_prev_uid = uid;
 
-       seq_range_array_add_with_init(&box->recent_flags, 64, uid);
-       box->recent_flags_count++;
+       if (!mailbox_recent_flags_have_uid(box, uid)) {
+               seq_range_array_add_with_init(&box->recent_flags, 64, uid);
+               box->recent_flags_count++;
+       }
 }
 
 void mailbox_recent_flags_set_seqs(struct mailbox *box,