diff --git a/src/lib-index/mail-index-transaction-update.c b/src/lib-index/mail-index-transaction-update.c index 5a39d1e6a3..c5012acfd2 100644 --- a/src/lib-index/mail-index-transaction-update.c +++ b/src/lib-index/mail-index-transaction-update.c @@ -1307,6 +1307,22 @@ void mail_index_reset(struct mail_index_transaction *t) t->reset = TRUE; } +void mail_index_unset_fscked(struct mail_index_transaction *t) +{ + struct mail_index_header new_hdr = + *mail_index_get_header(t->view); + + i_assert(t->view->index->log_sync_locked); + + /* remove fsck'd-flag if it exists. */ + if ((new_hdr.flags & MAIL_INDEX_HDR_FLAG_FSCKD) != 0) { + new_hdr.flags &= ~MAIL_INDEX_HDR_FLAG_FSCKD; + mail_index_update_header(t, + offsetof(struct mail_index_header, flags), + &new_hdr.flags, sizeof(new_hdr.flags), FALSE); + } +} + void mail_index_set_deleted(struct mail_index_transaction *t) { i_assert(!t->index_undeleted); diff --git a/src/lib-index/mail-index.h b/src/lib-index/mail-index.h index 82b38c9d6b..c493c72d13 100644 --- a/src/lib-index/mail-index.h +++ b/src/lib-index/mail-index.h @@ -523,6 +523,9 @@ void mail_index_update_highest_modseq(struct mail_index_transaction *t, /* Reset the index before committing this transaction. This is usually done only when UIDVALIDITY changes. */ void mail_index_reset(struct mail_index_transaction *t); +/* Remove MAIL_INDEX_HDR_FLAG_FSCKD from header if it exists. This must be + called only during syncing so that the mailbox is locked. */ +void mail_index_unset_fscked(struct mail_index_transaction *t); /* Mark index deleted. No further changes will be possible after the transaction has been committed. */ void mail_index_set_deleted(struct mail_index_transaction *t);