Mercurial > dovecot > core-2.2
changeset 21530:c337e4fe88e5
lib-index: Add MAIL_INDEX_OPEN_FLAG_NO_DIRTY
This way mailbox format backends that don't need dirty flags can use them
for other purposes.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Wed, 08 Feb 2017 12:03:30 +0200 |
parents | cb58131424be |
children | a326cf8a579a |
files | src/lib-index/mail-index-sync-update.c src/lib-index/mail-index-sync.c src/lib-index/mail-index.h |
diffstat | 3 files changed, 21 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-sync-update.c Fri Feb 10 16:26:15 2017 +0200 +++ b/src/lib-index/mail-index-sync-update.c Wed Feb 08 12:03:30 2017 +0200 @@ -422,7 +422,8 @@ map->hdr.messages_count++; map->hdr.next_uid = rec->uid+1; - if ((new_flags & MAIL_INDEX_MAIL_FLAG_DIRTY) != 0) + if ((new_flags & MAIL_INDEX_MAIL_FLAG_DIRTY) != 0 && + (view->index->flags & MAIL_INDEX_OPEN_FLAG_NO_DIRTY) == 0) map->hdr.flags |= MAIL_INDEX_HDR_FLAG_HAVE_DIRTY; mail_index_header_update_lowwaters(ctx, rec->uid, new_flags); @@ -447,7 +448,8 @@ seq1, seq2); } - if ((u->add_flags & MAIL_INDEX_MAIL_FLAG_DIRTY) != 0) + if ((u->add_flags & MAIL_INDEX_MAIL_FLAG_DIRTY) != 0 && + (view->index->flags & MAIL_INDEX_OPEN_FLAG_NO_DIRTY) == 0) view->map->hdr.flags |= MAIL_INDEX_HDR_FLAG_HAVE_DIRTY; flag_mask = ~u->remove_flags; @@ -856,7 +858,8 @@ const struct mail_index_record *rec; uint32_t seq; - if ((map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) != 0) + if ((map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) != 0 || + (map->index->flags & MAIL_INDEX_OPEN_FLAG_NO_DIRTY) != 0) return; /* do we have dirty flags anymore? */
--- a/src/lib-index/mail-index-sync.c Fri Feb 10 16:26:15 2017 +0200 +++ b/src/lib-index/mail-index-sync.c Wed Feb 08 12:03:30 2017 +0200 @@ -174,8 +174,9 @@ unsigned int i, keyword_count; int ret; - if ((ctx->view->map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) && - (ctx->flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0) { + if ((ctx->view->map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) != 0 && + (ctx->flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0 && + (ctx->view->index->flags & MAIL_INDEX_OPEN_FLAG_NO_DIRTY) == 0) { /* show dirty flags as flag updates */ mail_index_sync_add_dirty_updates(ctx); } @@ -252,8 +253,9 @@ (flags & MAIL_INDEX_SYNC_FLAG_DROP_RECENT) != 0) return TRUE; - if ((hdr->flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) && - (flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0) + if ((hdr->flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) != 0 && + (flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0 && + (index->flags & MAIL_INDEX_OPEN_FLAG_NO_DIRTY) == 0) return TRUE; if (log_file_seq == (uint32_t)-1) { @@ -532,8 +534,9 @@ (flags & MAIL_INDEX_SYNC_FLAG_DROP_RECENT) != 0) return TRUE; - if ((view->map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) && - (flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0) + if ((view->map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) != 0 && + (flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0 && + (view->index->flags & MAIL_INDEX_OPEN_FLAG_NO_DIRTY) == 0) return TRUE; mail_transaction_log_get_head(view->index->log, &log_seq, &log_offset);
--- a/src/lib-index/mail-index.h Fri Feb 10 16:26:15 2017 +0200 +++ b/src/lib-index/mail-index.h Wed Feb 08 12:03:30 2017 +0200 @@ -37,6 +37,9 @@ MAIL_INDEX_OPEN_FLAG_SAVEONLY = 0x400, /* Enable debug logging */ MAIL_INDEX_OPEN_FLAG_DEBUG = 0x800, + /* MAIL_INDEX_MAIL_FLAG_DIRTY can be used as a backend-specific flag. + All special handling of the flag is disabled by this. */ + MAIL_INDEX_OPEN_FLAG_NO_DIRTY = 0x1000, }; enum mail_index_header_compat_flags { @@ -55,7 +58,9 @@ enum mail_index_mail_flags { /* For private use by backend. Replacing flags doesn't change this. */ MAIL_INDEX_MAIL_FLAG_BACKEND = 0x40, - /* Message flags haven't been written to backend */ + /* Message flags haven't been written to backend. If + MAIL_INDEX_OPEN_FLAG_NO_DIRTY is set, this is treated as a + backend-specific flag with no special internal handling. */ MAIL_INDEX_MAIL_FLAG_DIRTY = 0x80, /* Force updating this message's modseq via a flag update record */ MAIL_INDEX_MAIL_FLAG_UPDATE_MODSEQ = 0x100