From: Timo Sirainen Date: Sun, 21 Feb 2016 01:40:48 +0000 (+0200) Subject: lib-index: mail_index_sync_next() didn't always return expunges sorted X-Git-Tag: 2.2.22.rc1~134 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=950a6e61d6c2dac961ce031bdd8b2895bc32b827;p=thirdparty%2Fdovecot%2Fcore.git lib-index: mail_index_sync_next() didn't always return expunges sorted Maildir and mbox formats were using index_sync_changes_read(), which assumed that they were sorted. So some of the intended expunges weren't actually always being done. This mainly affected when expunges were being done simultaneously by multiple processes or by pipelined commands. For example: printf "a select inbox\nb uid move 2 Trash\nc uid move 1 Trash\nd logout\n" | ./imap --- diff --git a/src/lib-index/mail-index-sync.c b/src/lib-index/mail-index-sync.c index d0320dd0aa..405aa4c4cf 100644 --- a/src/lib-index/mail-index-sync.c +++ b/src/lib-index/mail-index-sync.c @@ -206,6 +206,7 @@ mail_index_sync_read_and_sort(struct mail_index_sync_ctx *ctx) i_array_init(&ctx->sync_list, keyword_count + 2); if (array_is_created(&sync_trans->expunges)) { + mail_index_transaction_sort_expunges(sync_trans); synclist = array_append_space(&ctx->sync_list); synclist->array = (void *)&sync_trans->expunges; }